{
  "openapi": "3.1.0",
  "info": {
    "title": "Mojo Up platform API",
    "version": "0.82.0",
    "summary": "The public HTTP API of Mojo Up AI Cloud and self-hosted AIOE.",
    "description": "The surfaces AI Workbench, its nodes, the mobile app and integrations call. Mojo Up AI Cloud and self-hosted AIOE serve the same API from the same code; operations marked \"Mojo Up AI Cloud only\" exist only on Cloud. Generated from the platform's own schemas.",
    "contact": {
      "name": "Mojo Up support",
      "url": "https://docs.mojoup.com.au/support"
    }
  },
  "servers": [
    {
      "url": "https://ai.mojoup.com.au",
      "description": "Mojo Up AI Cloud"
    },
    {
      "url": "https://{host}",
      "description": "Your self-hosted AIOE",
      "variables": {
        "host": {
          "default": "aioe.example.com.au",
          "description": "Your AIOE API's host name"
        }
      }
    }
  ],
  "tags": [
    {
      "name": "Discovery",
      "description": "How clients find an organisation and what it offers."
    },
    {
      "name": "Organisation",
      "description": "The caller's organisation and edition."
    },
    {
      "name": "Cloud sign-in",
      "description": "Mojo Up AI Cloud's own sign-in: identity providers, emailed codes and tokens."
    },
    {
      "name": "Single sign-on",
      "description": "A Cloud team's own identity provider: finding it from an email address, and the sign-in that goes through it."
    },
    {
      "name": "Cloud account",
      "description": "The signed-in person on Mojo Up AI Cloud."
    },
    {
      "name": "Cloud organisations",
      "description": "Teams, members and invitations on Mojo Up AI Cloud."
    },
    {
      "name": "Devices",
      "description": "Enrolling workbenches and nodes with the device-code flow, and refreshing their tokens."
    },
    {
      "name": "Ingest",
      "description": "What workbenches report: events, usage, audit and tasks."
    },
    {
      "name": "Catalogue",
      "description": "The organisation's published templates."
    },
    {
      "name": "Policy",
      "description": "The rules a workbench enforces."
    },
    {
      "name": "Cloud agents",
      "description": "Cloud runs a workbench registers, and the MCP endpoint the provider's agent calls."
    },
    {
      "name": "Project orders",
      "description": "Asking every node of a project to download or remove a local model, install a runtime, set data loss prevention or a setting, and following the machines' answers."
    },
    {
      "name": "Project pictures",
      "description": "Diagrams a team keeps at the project's home, each with the version before it."
    },
    {
      "name": "Desktop sign-in",
      "description": "A desktop presents the person's sign-in beside its device token, so the platform can judge step-up."
    },
    {
      "name": "People",
      "description": "Who is in the organisation, by name."
    },
    {
      "name": "Project teams",
      "description": "Teams and specialists of a project, and the words a team editor offers."
    },
    {
      "name": "Saved teams",
      "description": "Teams saved for a project."
    },
    {
      "name": "My tasks",
      "description": "The tasks assigned to the signed-in person across their projects."
    },
    {
      "name": "Project history",
      "description": "A project's activity graph of a run, agent, task or conversation, and its runs timeline."
    },
    {
      "name": "Project conversations",
      "description": "Chat and Research conversations people share live with a project or chosen members, and reading the ones shared with you."
    },
    {
      "name": "Live sessions",
      "description": "The sessions open to remote control, a person's own across machines and a project's that the caller may watch."
    },
    {
      "name": "Assurance",
      "description": "The register of reviewed ratings for each model provider and tier that Mojo Up AI Cloud publishes."
    },
    {
      "name": "Project queue",
      "description": "Claims on the project queue (keeping a lease, taking a task from the machine holding it, releasing it) and the project's repositories: naming and removing one, and placing a part of a task on a machine that holds it."
    },
    {
      "name": "Project lifecycle",
      "description": "Asking to join a project, merging, archiving, restoring and handing over ownership."
    },
    {
      "name": "Notification preferences",
      "description": "A person's email digest, quiet hours and time zone for notifications."
    },
    {
      "name": "Project trackers",
      "description": "Boards kept on a workbench, and the tracker mirrors they write."
    },
    {
      "name": "SCIM",
      "description": "Mojo Up AI Cloud only. Lets a team's identity provider add, change and remove its people and groups (SCIM 2.0)."
    },
    {
      "name": "Status",
      "description": "Whether the platform is up, and its incidents."
    },
    {
      "name": "Health",
      "description": "Liveness and readiness probes."
    }
  ],
  "paths": {
    "/.well-known/aioe.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getDiscoveryDocument",
        "summary": "Discovery document",
        "description": "Public. Tells a workbench, node or phone where to sign in and what this deployment offers. A self-hosted organisation is found from a work email: the client looks up `aioe-discover.<domain>` in DNS (a CNAME to the platform, or a TXT record `v=aioe1; url=https://…`) and then fetches this document. Mojo Up AI Cloud answers one document for everyone, with `edition: \"cloud\"`.",
        "security": [],
        "responses": {
          "200": {
            "description": "The discovery document. Cached for five minutes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscoveryDocument"
                }
              }
            }
          },
          "404": {
            "description": "Self-hosted: no organisation answers at this host name.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unknown_tenant"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/platform/v1/organisation": {
      "get": {
        "tags": [
          "Organisation"
        ],
        "operationId": "getOrganisation",
        "summary": "The caller's organisation",
        "description": "The organisation a device or person belongs to, and its edition. A workbench takes its edition from this answer: an Enterprise organisation is Enterprise, a Cloud team is Teams, a personal Cloud organisation is Free.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The organisation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformOrganisation"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/providers": {
      "get": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "listSignInProviders",
        "summary": "Sign-in providers",
        "description": "Mojo Up AI Cloud only. The sign-in buttons to show: the identity providers configured on this deployment, and email.",
        "security": [],
        "responses": {
          "200": {
            "description": "The providers, in display order.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SignInProviders"
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/start": {
      "get": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "startSignIn",
        "summary": "Start a sign-in with a provider",
        "description": "Mojo Up AI Cloud only. Sends the browser to the provider (Google, GitHub, Microsoft or Facebook). After the person signs in there, Cloud returns them to `redirect_uri` with a one-time `code` (valid for 60 seconds) and your `state`, or with `error`. Exchange the code at `/auth/v1/token`. Uses PKCE with S256. Redirect addresses are allow-listed per client.",
        "security": [],
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "google",
                "github",
                "microsoft",
                "facebook"
              ]
            }
          },
          {
            "name": "client",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "console",
                "mobile"
              ]
            }
          },
          {
            "name": "redirect_uri",
            "in": "query",
            "required": true,
            "description": "Where to return. Must be registered for the client.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code_challenge",
            "in": "query",
            "required": true,
            "description": "The PKCE challenge: base64url SHA-256 of your verifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code_challenge_method",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "S256"
              ],
              "default": "S256"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Returned to you unchanged.",
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          },
          {
            "name": "link",
            "in": "query",
            "required": false,
            "description": "A ticket from `POST /cloud/v1/me/sign-in-methods/link`, to add this provider to the signed-in person instead of signing in.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "A redirect to the provider, or back to `redirect_uri` with `error=invalid_request`."
          },
          "400": {
            "description": "`redirect_uri` is not registered, so Cloud answers here instead of redirecting.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too many sign-in requests from your network address in the last minute. Wait, then try again."
          }
        }
      }
    },
    "/auth/v1/sso/discover": {
      "get": {
        "tags": [
          "Single sign-on"
        ],
        "operationId": "discoverSso",
        "summary": "Does this address sign in through a team's provider?",
        "description": "Mojo Up AI Cloud only. Asks whether the email address's domain belongs to a team that uses its own identity provider (single sign-on). The sign-in page calls it before showing the other buttons.",
        "security": [],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`sso` says whether a provider answers for the address; `label` names it; `enforced` says the person must use it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SsoDiscovery"
                }
              }
            }
          },
          "429": {
            "description": "Too many sign-in requests from your network address in the last minute. Wait, then try again."
          }
        }
      }
    },
    "/auth/v1/sso/start": {
      "get": {
        "tags": [
          "Single sign-on"
        ],
        "operationId": "startSso",
        "summary": "Start a sign-in with the team's provider",
        "description": "Mojo Up AI Cloud only. Sends the browser to the provider of the team that owns the address's domain: an OpenID Connect provider with `login_hint`, PKCE and a nonce, or a SAML 2.0 provider with an AuthnRequest. The person returns to `redirect_uri` with a one-time `code` and your `state`, exactly as with the other providers; exchange it at `/auth/v1/token`.",
        "security": [],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "email"
            }
          },
          {
            "name": "client",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "console",
                "mobile"
              ]
            }
          },
          {
            "name": "redirect_uri",
            "in": "query",
            "required": true,
            "description": "Where to return. Must be registered for the client.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code_challenge",
            "in": "query",
            "required": true,
            "description": "The PKCE challenge: base64url SHA-256 of your verifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Returned to you unchanged.",
            "schema": {
              "type": "string",
              "maxLength": 500
            }
          }
        ],
        "responses": {
          "302": {
            "description": "A redirect to the team's provider, or back to `redirect_uri` with `error`."
          },
          "400": {
            "description": "`redirect_uri` is not registered, so Cloud answers here instead of redirecting.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too many sign-in requests from your network address in the last minute. Wait, then try again."
          }
        }
      }
    },
    "/auth/v1/callback/sso": {
      "get": {
        "tags": [
          "Single sign-on"
        ],
        "operationId": "callbackSso",
        "summary": "The provider's return address",
        "description": "Mojo Up AI Cloud only. Where the team's provider sends the browser back. Cloud checks the ID token (signature, issuer, audience, nonce, and that the address is in a verified domain of the team), then returns the person to the client with a one-time code. Register `https://<cloud api>/auth/v1/callback/sso` with the provider; clients do not call it.",
        "security": [],
        "responses": {
          "302": {
            "description": "Back to the client's `redirect_uri` with `code` and `state`, or with `error`."
          }
        }
      }
    },
    "/auth/v1/sso/saml/metadata": {
      "get": {
        "tags": [
          "Single sign-on"
        ],
        "operationId": "samlMetadata",
        "summary": "Our SAML 2.0 service provider metadata for a team",
        "description": "Mojo Up AI Cloud only. The metadata an owner gives the team's SAML 2.0 identity provider (Entra ID, Okta and others): the entity ID for the team, the assertion consumer service (HTTP-POST), the name identifier formats read, and that assertions must be signed. Served as `application/samlmetadata+xml`. Anyone may fetch it; it holds nothing secret.",
        "security": [],
        "parameters": [
          {
            "name": "org",
            "in": "query",
            "required": true,
            "description": "The team's organisation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The metadata document.",
            "content": {
              "application/samlmetadata+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/sso/saml/acs": {
      "post": {
        "tags": [
          "Single sign-on"
        ],
        "operationId": "samlAcs",
        "summary": "The SAML 2.0 identity provider's return address",
        "description": "Mojo Up AI Cloud only. Where a team's SAML 2.0 identity provider posts the signed Response (HTTP-POST binding). Cloud checks the Response (strict XML, the destination, the request it answers, the signature against the team's certificate, the issuer, the times, and that the address is in a verified domain of the team), then returns the person to the client with a one-time code, exactly as with OpenID Connect. Register `https://<cloud api>/auth/v1/sso/saml/acs` with the provider; clients do not call it. A Response that answers no live sign-in (started by the provider, expired or already used) is refused with 400.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "SAMLResponse": {
                    "type": "string",
                    "description": "The base64 SAML Response, at most 512 KB."
                  },
                  "RelayState": {
                    "type": "string",
                    "description": "The state Cloud sent with the request, returned unchanged."
                  }
                },
                "required": [
                  "SAMLResponse",
                  "RelayState"
                ]
              }
            }
          }
        },
        "responses": {
          "303": {
            "description": "Back to the client's `redirect_uri` with `code` and `state`, or with `error`."
          },
          "400": {
            "description": "The Response answers no live sign-in, or the request is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/email/start": {
      "post": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "startEmailSignIn",
        "summary": "Email a sign-in code",
        "description": "Mojo Up AI Cloud only. Emails a six-digit code that works for 10 minutes. Always answers 202, so it never reveals whether an address has an account. At most five codes per address per hour.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailStartInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted. If the address can receive mail, a code is on its way.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed or the redirect address is not registered.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too many codes for this address (try again in an hour), or too many requests from your network address.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "slow_down"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/email/verify": {
      "post": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "verifyEmailCode",
        "summary": "Check an emailed code",
        "description": "Mojo Up AI Cloud only. Exchanges the six digits for a one-time code to send to `/auth/v1/token`. A code allows five tries.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailVerifyInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The one-time code, and your `state`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailVerifyResponse"
                }
              }
            }
          },
          "400": {
            "description": "The code is wrong or has expired.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "invalid_code"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Adding this address to an account: it already signs in to another Mojo Up account.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "already_linked"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too many sign-in requests from your network address in the last minute. Wait, then try again."
          }
        }
      }
    },
    "/auth/v1/token": {
      "post": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "getCloudTokens",
        "summary": "Get or refresh tokens",
        "description": "Mojo Up AI Cloud only. OAuth 2.1 shaped: exchange a one-time code (with your PKCE verifier) or a refresh token for an access token (15 minutes by default) and a refresh token (30 days by default). Refresh tokens rotate on every use; presenting an old one again ends the whole session. Accepts JSON or form-encoded bodies.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudTokenRequestInput"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/CloudTokenRequestInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The token pair.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloudTokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "The code or refresh token is wrong, used or expired.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "invalid_grant"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Too many sign-in requests from your network address in the last minute. Wait, then try again."
          }
        }
      }
    },
    "/auth/v1/logout": {
      "post": {
        "tags": [
          "Cloud sign-in"
        ],
        "operationId": "signOut",
        "summary": "Sign out",
        "description": "Mojo Up AI Cloud only. Ends the session the access token belongs to, with every token issued in it.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "responses": {
          "204": {
            "description": "Signed out."
          }
        }
      }
    },
    "/cloud/v1/me": {
      "get": {
        "tags": [
          "Cloud account"
        ],
        "operationId": "getMe",
        "summary": "You, your organisations and sign-in methods",
        "description": "Mojo Up AI Cloud only. Organisations are listed personal first, then teams by name.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "The signed-in person.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloudMe"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Cloud account"
        ],
        "operationId": "renameMe",
        "summary": "Change your name",
        "description": "Mojo Up AI Cloud only. Your name as your teams see it, up to 100 characters.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No name given.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Cloud account"
        ],
        "operationId": "deleteAccount",
        "summary": "Delete your account",
        "description": "Mojo Up AI Cloud only. Deletes the account, every sign-in method, and every organisation only you belong to (your personal organisation, and any team where you are the only person) with everything in them. You leave every other team, and your devices' access to it ends. Refused while you are the only owner of a team that has other people in it. Confirm with your email address (or the word `delete` if the account has no email). It cannot be undone.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteAccountInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "400": {
            "description": "The confirmation did not match.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "confirm"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "You are the only owner of these teams, which have other people in them: make someone else an owner first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "sole_owner"
                      ]
                    },
                    "organisations": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/me/sign-in-methods/link": {
      "post": {
        "tags": [
          "Cloud account"
        ],
        "operationId": "getLinkTicket",
        "summary": "Start adding a sign-in method",
        "description": "Mojo Up AI Cloud only. A five-minute ticket to pass as `link` to `/auth/v1/start` or `/auth/v1/email/start`, so the new method joins your account instead of signing you in.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "The ticket.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkTicket"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/me/sign-in-methods/{methodId}": {
      "delete": {
        "tags": [
          "Cloud account"
        ],
        "operationId": "removeSignInMethod",
        "summary": "Remove a sign-in method",
        "description": "Mojo Up AI Cloud only. You cannot remove your only way to sign in.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "methodId",
            "in": "path",
            "required": true,
            "description": "The sign-in method's id, from `GET /cloud/v1/me`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Add another way to sign in before removing this one.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "last_sign_in_method"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations": {
      "post": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "createTeam",
        "summary": "Create a team",
        "description": "Mojo Up AI Cloud only. Creates a team organisation with you as its owner.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrganisationInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The new team.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganisationSummary"
                }
              }
            }
          },
          "400": {
            "description": "No name given.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations/{id}": {
      "patch": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "renameTeam",
        "summary": "Rename a team",
        "description": "Mojo Up AI Cloud only. Owners and admins.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameOrganisationInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Renamed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No name given.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Only owners and admins can do this.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "A personal organisation cannot be changed this way.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "personal_organisation"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations/{id}/members": {
      "get": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "listMembers",
        "summary": "List members",
        "description": "Mojo Up AI Cloud only. Any member can see who else is in the organisation.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The members.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "members": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CloudMember"
                      }
                    }
                  },
                  "required": [
                    "members"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations/{id}/members/{userId}": {
      "patch": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "setMemberRole",
        "summary": "Change a member's role",
        "description": "Mojo Up AI Cloud only. Owners and admins; only an owner can make or unmake an owner, and a team always keeps at least one owner.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "The member's person id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetMemberRoleInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Changed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Not a role.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Make someone else an owner first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "last_owner",
                        "personal_organisation"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "removeMember",
        "summary": "Remove a member, or leave",
        "description": "Mojo Up AI Cloud only. Owners and admins remove others; anyone can remove themselves (leave). Only an owner can remove an owner. The person's devices lose access to the organisation.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "The member's person id; your own to leave.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Make someone else an owner first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "last_owner",
                        "personal_organisation"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations/{id}/invitations": {
      "get": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "listInvitations",
        "summary": "List open invitations",
        "description": "Mojo Up AI Cloud only. Owners and admins.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Invitations not yet accepted, withdrawn or expired.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "invitations": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CloudInvitation"
                      }
                    }
                  },
                  "required": [
                    "invitations"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "invite",
        "summary": "Invite someone",
        "description": "Mojo Up AI Cloud only. Owners and admins. Emails a link that works once, for seven days by default. The answer carries the link too; it is shown only here.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateInvitationInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The invitation, with its link.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedInvitation"
                }
              }
            }
          },
          "400": {
            "description": "Not an email address.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "A personal organisation cannot take members.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "personal_organisation"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/organisations/{id}/invitations/{invitationId}": {
      "delete": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "withdrawInvitation",
        "summary": "Withdraw an invitation",
        "description": "Mojo Up AI Cloud only. Owners and admins.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The organisation id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invitationId",
            "in": "path",
            "required": true,
            "description": "The invitation id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Withdrawn."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/invitations/{token}": {
      "get": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "previewInvitation",
        "summary": "See an invitation",
        "description": "Mojo Up AI Cloud only. Public: what someone opening an invitation link sees before they sign in.",
        "security": [],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "The token from the invitation link.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The invitation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationPreview"
                }
              }
            }
          },
          "404": {
            "description": "The invitation has expired or was withdrawn.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud/v1/invitations/{token}/accept": {
      "post": {
        "tags": [
          "Cloud organisations"
        ],
        "operationId": "acceptInvitation",
        "summary": "Accept an invitation",
        "description": "Mojo Up AI Cloud only. Needs a sign-in method whose verified email address is the one the invitation was sent to.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "description": "The token from the invitation link.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The organisation you joined.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganisationSummary"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "The invitation is for another address.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "email_mismatch"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The invitation has expired or was withdrawn.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/relay/v1/device/code": {
      "post": {
        "tags": [
          "Devices"
        ],
        "operationId": "requestDeviceCode",
        "summary": "Ask to enrol a device",
        "description": "A workbench or node asks to join an organisation (RFC 8628 device authorisation). Show the person `user_code` and `verification_uri`; someone approves it in the console (a node waits for a person allowed to approve nodes). Then poll `/relay/v1/device/token`. Send `dpop_jkt` to have the tokens bound to a key (DPoP, RFC 9449).",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceCodeRequestInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The codes, how long they last and how often to poll.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceCode"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/relay/v1/device/token": {
      "post": {
        "tags": [
          "Devices"
        ],
        "operationId": "pollDeviceToken",
        "summary": "Poll for the device's tokens",
        "description": "Poll at the `interval` the code came with. Polling faster gets `slow_down`. With a DPoP-bound request, send a `DPoP` proof header.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceTokenRequestInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Approved: the device's tokens, its id and the scopes granted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "Not yet (`authorization_pending`, `slow_down`), or never (`access_denied`, `expired_token`, `invalid_grant`, `invalid_dpop_proof`).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenError"
                }
              }
            }
          }
        }
      }
    },
    "/relay/v1/device/join": {
      "post": {
        "tags": [
          "Devices"
        ],
        "operationId": "joinWithKey",
        "summary": "Join a node with a join key",
        "description": "A node joins with a key an administrator created, instead of waiting for someone to approve a code. The administrator who created the key is recorded as its approver.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NodeJoinInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Joined: the node's tokens.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The key is wrong, expired or used up.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_key"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/relay/v1/token": {
      "post": {
        "tags": [
          "Devices"
        ],
        "operationId": "refreshDeviceToken",
        "summary": "Refresh a device's tokens",
        "description": "Exchange a device refresh token for a new access token. DPoP-bound tokens need a `DPoP` proof header.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequestInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "New tokens.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "invalid_dpop_proof"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The refresh token is wrong, revoked or expired.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_grant"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/ingest/v1": {
      "post": {
        "tags": [
          "Ingest"
        ],
        "operationId": "ingest",
        "summary": "Send events, usage, audit and tasks",
        "description": "A workbench sends everything since its last upload in one envelope, and advances its cursors from the answer. Credentials that stray into events and audit details are redacted on receipt; a memory read is audited by label, never by content.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlatformEnvelopeInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "What was accepted, and the cursors now held.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestResponse"
                }
              }
            }
          },
          "400": {
            "description": "The envelope does not match the schema.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_envelope"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1": {
      "get": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "getCatalogue",
        "summary": "The organisation's catalogue",
        "description": "The teams, roles, skills and prompts the organisation publishes, for workbenches to pull into their templates. Tool servers (`mcp`), approved local models (`model`) and document templates are served only to a caller that asks for them with `include`. Supports `If-None-Match`.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Comma-separated extra kinds: `mcp` adds tool servers, `model` adds the approved local models (AIOE 0.37.0); any value adds document templates.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The catalogue.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalogue"
                }
              }
            }
          },
          "304": {
            "description": "Unchanged since the ETag you sent."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/usage": {
      "post": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "postCatalogueUsage",
        "summary": "Report how often catalogue skills load",
        "description": "A device reports how many times each catalogue skill loaded, by the hour (AIOE 0.41.0). An entry the catalogue no longer holds is ignored, not refused.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "loads": {
                    "type": "array",
                    "maxItems": 2000,
                    "items": {
                      "type": "object",
                      "properties": {
                        "entryId": {
                          "type": "string"
                        },
                        "hour": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "loads": {
                          "type": "integer",
                          "minimum": 0
                        }
                      },
                      "required": [
                        "entryId",
                        "hour",
                        "loads"
                      ]
                    }
                  }
                },
                "required": [
                  "loads"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "How many rows were counted and how many ignored.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accepted": {
                      "type": "integer"
                    },
                    "ignored": {
                      "type": "integer",
                      "description": "Entries the catalogue does not hold."
                    }
                  },
                  "required": [
                    "accepted",
                    "ignored"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid, or an hour is not a time.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_usage"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/policy/v1": {
      "get": {
        "tags": [
          "Policy"
        ],
        "operationId": "getPolicy",
        "summary": "The policy that applies",
        "description": "The organisation's effective policy for a workbench, or for one project when `projectId` is given: runtimes, providers, data loss prevention, approvals, remote control, network, tools, governed settings and more.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "required": false,
            "description": "The organisation project to resolve the policy for.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The effective policy.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PolicyResponse"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud-agents/v1/runs": {
      "post": {
        "tags": [
          "Cloud agents"
        ],
        "operationId": "createCloudRun",
        "summary": "Register a cloud run",
        "description": "A desktop workbench registers a task it sends to a provider's cloud agent. The organisation checks the project, the policy's `cloudAgents.allowed` and `maxConcurrent`, and that `startedBy` (when sent) is the token's person. When the run names a `workspace` and `tools`, the answer carries the MCP endpoint and a per-run credential (kept only as a hash, at most four hours) for the provider. A node is refused.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudRunCreateInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The run is recorded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloudRunCreated"
                }
              }
            }
          },
          "400": {
            "description": "The body does not match the schema, `expiresAt` is not in the future, or the repository is not the project's.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "unknown_root"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "The policy does not allow the provider (a managed policy without `cloudAgents` allows none), the run names another person, the caller is a node, the person is not a member of the project, or is only a viewer. Never 404: a workbench reads 404 as \"this organisation does not record cloud runs\".",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "cloud_not_allowed",
                        "principal_mismatch",
                        "node_not_allowed",
                        "not_a_member",
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The project already has the most open cloud runs the policy allows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "cloud_concurrency"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud-agents/v1/runs/{runId}/events": {
      "post": {
        "tags": [
          "Cloud agents"
        ],
        "operationId": "postCloudRunEvents",
        "summary": "Report what happened to a cloud run",
        "description": "Only the device that registered the run. Events carry the provider's task id, page and pull request, and a sentence, never task text.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "description": "The run, as registered.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudRunEventsPostInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Recorded."
          },
          "400": {
            "description": "The body does not match the schema.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud-agents/v1/runs/{runId}/end": {
      "post": {
        "tags": [
          "Cloud agents"
        ],
        "operationId": "endCloudRun",
        "summary": "End a cloud run",
        "description": "Only the device that registered the run. The run's credential stops working at once. Ending twice is harmless.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "description": "The run, as registered.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudRunEndInput"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Ended."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloud-agents/v1/runs/{runId}/mcp": {
      "post": {
        "tags": [
          "Cloud agents"
        ],
        "operationId": "cloudRunMcp",
        "summary": "The workbench's tools, for the provider's agent",
        "description": "MCP Streamable HTTP, JSON answers only, authenticated with the run's credential as a Bearer token. Each JSON-RPC message (a batch is several) is relayed to the workbench that started the run as the Control API method `cloudMcp.call`, signed for the run's person with the scope `tasks:write`. A notification is answered 202. A workbench that is not connected is a JSON-RPC error -32000. At most 1 MB a request and 300 requests a minute per run. `GET` and `DELETE` answer 405.",
        "security": [
          {
            "cloudRunCredential": []
          }
        ],
        "parameters": [
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "description": "The run, as registered.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "description": "A JSON-RPC 2.0 message, or an array of them."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The answer.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The MCP answer, or an array of answers for a batch."
                }
              }
            }
          },
          "202": {
            "description": "Only notifications were sent."
          },
          "401": {
            "description": "No credential, a wrong one, or the run has ended or expired. No detail is given."
          },
          "413": {
            "description": "The request is larger than 1 MB."
          },
          "429": {
            "description": "Too many requests for this run in the last minute."
          }
        }
      }
    },
    "/projects/v1/{id}/pictures": {
      "get": {
        "tags": [
          "Project pictures"
        ],
        "operationId": "listProjectPictures",
        "summary": "The project's pictures",
        "description": "Newest first, with the people named in them. No SVG; the spec only with `include=spec`. Members of the project, viewers too.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "`spec` adds each picture's spec.",
            "schema": {
              "type": "string",
              "enum": [
                "spec"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The pictures.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "pictures": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "people": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/pictures/{slug}": {
      "get": {
        "tags": [
          "Project pictures"
        ],
        "operationId": "getProjectPicture",
        "summary": "One picture, with its spec and SVG",
        "description": "The ETag is the version.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Lower-case letters, digits and dashes, at most 60.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The picture.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Project pictures"
        ],
        "operationId": "putProjectPicture",
        "summary": "Save a picture",
        "description": "Contributors and owners. A change to the spec, SVG or look adds a version and keeps the one it replaces as the version before; the same picture again is no new version. `If-Match: \"<version>\"` (`\"0\"`: it was not there) and `If-None-Match: *` guard the write. The SVG may hold shapes, text, styles, SMIL animation and `data:` fonts; never script, `foreignObject`, embedded documents, entities, event handlers, `javascript:`, or references to anything but `#id` and `data:`. Spec at most 512 KB, SVG at most 2 MB, body at most 3 MB; a project keeps at most 200 pictures.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Lower-case letters, digits and dashes, at most 60.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectPicturePutInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Replaced, or unchanged.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "201": {
            "description": "A new picture.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The body or the SVG is not one the organisation keeps.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Viewers do not save pictures.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The project keeps its most pictures already.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "too_many"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "412": {
            "description": "The picture is not at the version named; `current` says what is.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "precondition_failed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "413": {
            "description": "Past a size cap.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "too_large"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Project pictures"
        ],
        "operationId": "deleteProjectPicture",
        "summary": "Remove a picture",
        "description": "Contributors and owners; the version before goes with it. `If-Match` as for a save.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The picture.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Viewers do not remove pictures.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "412": {
            "description": "The picture is not at the version named.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "precondition_failed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/pictures/{slug}/previous": {
      "get": {
        "tags": [
          "Project pictures"
        ],
        "operationId": "getProjectPicturePrevious",
        "summary": "The version a picture replaced",
        "description": "One step back, whole: its spec and SVG.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The picture.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The version before.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such picture, or it has never been replaced.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found",
                        "no_previous"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/orders": {
      "post": {
        "tags": [
          "Project orders"
        ],
        "operationId": "issueProjectOrders",
        "summary": "Ask every node of a project to do something",
        "description": "A project owner (an administrator or portfolio manager counts) sends one order, `{ kind, body }`, to every approved node assigned to the project or owned by it; never a desktop. The nodes take it on their next heartbeat and answer there. `kind` is one of `model.download`, `model.remove`, `runtime.install`, `runtime.remove`, `dlp.configure` and `setting.set`; a model download is ordered from the approved models in the catalogue only. Teams plan and above.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceOrderIssueInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The batch: its id and an order for each node.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceOrderBatch"
                }
              }
            }
          },
          "400": {
            "description": "The body is not `{ kind, body }`, or the body does not fit the kind.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_order"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Only the project's owners ask its nodes to do things, or the plan does not take orders.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden",
                        "not_in_plan"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "No approved node is assigned to this project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "no_nodes"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Project orders"
        ],
        "operationId": "listProjectOrders",
        "summary": "The orders sent to a project's nodes",
        "description": "The last 100 orders of the project, newest first, with a count by state. With `batchId`, only that batch. A project's owners.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "batchId",
            "in": "query",
            "required": false,
            "description": "The batch an earlier `POST` answered with.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The orders, each with the machine's answer once it has given one.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "batchId": {
                      "type": "string"
                    },
                    "orders": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DeviceOrderRecord"
                      }
                    },
                    "summary": {
                      "type": "object",
                      "description": "The count of orders in each state: pending, done, failed, refused, expired."
                    }
                  },
                  "required": [
                    "orders",
                    "summary"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Only the project's owners.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/fleet/v1/orders/{orderId}/evaluation": {
      "get": {
        "tags": [
          "Project orders"
        ],
        "operationId": "getOrderEvaluation",
        "summary": "What a node needs to run a specialist evaluation",
        "description": "A node reads this for a pending `specialist.evaluate` order it holds (AIOE 0.45.0, extended in 0.46.0): the specialist, the team that uses it if one was named, the dataset, the platform's own `specialistDigest` and each member's `rawInstructions`. Answers 404 for an order that is not this machine's or not an evaluation, 409 once the order is no longer pending, and 410 (`specialist_gone` or `dataset_gone`) when the specialist or dataset was removed after the order was sent: refuse the order.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "The pending `specialist.evaluate` order.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The specialist, optional team and dataset to run.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "orderId": {
                      "type": "string"
                    },
                    "specialistDigest": {
                      "type": "string"
                    },
                    "rawInstructions": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Each member's own agent instructions by member name; empty when it has none."
                    },
                    "specialist": {
                      "type": "object"
                    },
                    "team": {
                      "type": "object"
                    },
                    "dataset": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        },
                        "content": {}
                      },
                      "required": [
                        "id",
                        "name",
                        "content"
                      ]
                    }
                  },
                  "required": [
                    "orderId",
                    "specialistDigest",
                    "rawInstructions",
                    "specialist",
                    "dataset"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The order is no longer pending.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_pending"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The specialist or the dataset was removed after the order was sent.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "specialist_gone",
                        "dataset_gone"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/fleet/v1/orders/{orderId}/foundry": {
      "get": {
        "tags": [
          "Project orders"
        ],
        "operationId": "getFoundryOrder",
        "summary": "What a node needs to publish or delete a Foundry agent",
        "description": "For a pending `foundry.publish` or `foundry.unpublish` order this node holds (AIOE 0.48.0): the team, the member, the project the checks used, the Foundry policy clause, and `teamConfig`, the team as the project's team list gives it. The pending order is the authority; the node never speaks as a person.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "The pending Foundry order.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The order's team, member and policy.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "orderId": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "foundry.publish",
                        "foundry.unpublish"
                      ]
                    },
                    "team": {
                      "type": "object"
                    },
                    "member": {
                      "type": "object"
                    },
                    "project": {
                      "type": "object"
                    },
                    "clause": {
                      "type": "object"
                    },
                    "teamConfig": {
                      "type": "object"
                    }
                  },
                  "required": [
                    "orderId",
                    "kind",
                    "team",
                    "member"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The order is no longer pending.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_pending"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The team or member went after the order was given (`member_renamed` carries `memberName`): refuse the order.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "team_gone",
                        "member_gone",
                        "member_renamed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/fleet/v1/orders/{orderId}/foundry/block": {
      "put": {
        "tags": [
          "Project orders"
        ],
        "operationId": "putFoundryOrderBlock",
        "summary": "Record the Foundry agent a node made",
        "description": "Writes only that member's Foundry block. On an unpublish, `{ \"block\": null }` or a block of only the project and deployment drops what the publish recorded and keeps the member on Foundry. A block naming another project than the order is refused (`endpoint_differs`).",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "The pending Foundry order.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The member's Foundry block, or null.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "block": {}
                },
                "required": [
                  "block"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The order view after the write.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The block is not valid, missing on a publish, or names another project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "block_required",
                        "endpoint_differs"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The order is no longer pending.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_pending"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The team or member went after the order was given (`member_renamed` carries `memberName`): refuse the order.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "team_gone",
                        "member_gone",
                        "member_renamed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/fleet/v1/orders/{orderId}/foundry/credentials": {
      "get": {
        "tags": [
          "Project orders"
        ],
        "operationId": "getFoundryOrderCredentials",
        "summary": "The organisation's Foundry sign-in for one order",
        "description": "From the organisation secrets FOUNDRY_TENANT_ID, FOUNDRY_CLIENT_ID and FOUNDRY_CLIENT_SECRET, for this pending order only, never cached (`no-store`), and audited as a secret release for the person who asked.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "The pending Foundry order.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tenantId": {
                      "type": "string"
                    },
                    "clientId": {
                      "type": "string"
                    },
                    "clientSecret": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tenantId",
                    "clientId",
                    "clientSecret"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "The Foundry policy does not allow it, in words.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "foundry_not_allowed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The order is no longer pending, or a secret is missing (`missing` names them).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_pending",
                        "credentials_missing"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The team or member went after the order was given (`member_renamed` carries `memberName`): refuse the order.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "team_gone",
                        "member_gone",
                        "member_renamed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "503": {
            "description": "This deployment keeps no secrets.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "secrets_unavailable"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/orders/{orderId}": {
      "delete": {
        "tags": [
          "Project orders"
        ],
        "operationId": "cancelProjectOrder",
        "summary": "Cancel an order that has not been taken yet",
        "description": "A project's owners. Only a pending order can be cancelled.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderId",
            "in": "path",
            "required": true,
            "description": "The order.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The order, cancelled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceOrderRecord"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Only the project's owners.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such project, or no such order of it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The order is done, failed, refused or expired already.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_pending"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/auth/v1/desktop/sign-in": {
      "post": {
        "tags": [
          "Desktop sign-in"
        ],
        "operationId": "desktopSignIn",
        "summary": "Present the person's sign-in from a desktop",
        "description": "A desktop presents the person's own sign-in once, beside its device token, and the platform keeps the dated sign-in on the device. That lets it judge a gated action (a peer token for hosts or computer control, adding a folder to a node) against the organisation's step-up window. Send `idToken` on Enterprise (the access token your identity provider issued for the AIOE API) or `sessionToken` on Mojo Up AI Cloud (the person's Cloud access token), never both. A gated action without a recent sign-in answers `401 sign_in_again` with `how: \"desktop-sign-in\"`; sign in again, then call this.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesktopSignInRequestInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "What the platform now holds for this device.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DesktopSignInState"
                }
              }
            }
          },
          "400": {
            "description": "The request is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Desktop sign-in"
        ],
        "operationId": "getDesktopSignIn",
        "summary": "The sign-in held for this device",
        "description": "When the person signed in, when the platform checked it, how long it counts, and until when it meets the organisation's step-up window.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "The state; `signedIn: false` when there is none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DesktopSignInState"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Desktop sign-in"
        ],
        "operationId": "desktopSignOut",
        "summary": "Forget the sign-in held for this device",
        "description": "Sign out. Answers 204 whether or not there was one.",
        "security": [
          {
            "deviceToken": []
          }
        ],
        "responses": {
          "204": {
            "description": "Forgotten."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/people/v1/directory": {
      "get": {
        "tags": [
          "People"
        ],
        "operationId": "searchPeopleDirectory",
        "summary": "Find people in the organisation",
        "description": "Search by name or email, so a teammate is picked by name and never by a bare id. Each person may carry `linked`, the GitHub, Azure DevOps and Jira accounts they linked, by name only (never a token); it is left out when they linked none. A device token or a person's sign-in works.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "At least two characters, matched case-insensitively against name and email.",
            "schema": {
              "type": "string",
              "minLength": 2
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "At most 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "required": false,
            "description": "Adds `onProject` to each person.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The people who matched.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "people": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DirectoryPerson"
                      }
                    },
                    "more": {
                      "type": "boolean",
                      "description": "More matched than `limit` allows; type more to narrow."
                    },
                    "sources": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "aioe",
                          "members",
                          "entra"
                        ]
                      },
                      "description": "Where the answer came from."
                    }
                  },
                  "required": [
                    "people",
                    "more",
                    "sources"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The query is shorter than two characters.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/people/v1/me": {
      "get": {
        "tags": [
          "People"
        ],
        "operationId": "getMe",
        "summary": "The person behind the token",
        "description": "The person as this organisation vouches for them. `profileUrl` is the console page where they link their GitHub, Azure DevOps and Jira accounts.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The person.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PeopleMe"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/people/v1/{id}/picture": {
      "get": {
        "tags": [
          "People"
        ],
        "operationId": "getPersonPicture",
        "summary": "A person's picture",
        "description": "The picture of any person in the caller's organisation, proxied by the platform, whether or not you share a project with them. Read by a person: a sign-in or a desktop's device token. Answers 404 when the person has none, belongs to another organisation, or has a picture over 256 KB or not a PNG, JPEG, GIF or WebP. The `ETag` is a hash of the picture; send it back as `If-None-Match` for a 304.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The person.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "The `ETag` of the copy you hold.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The picture itself.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/gif": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "The copy you hold is current."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "A node has no person; pictures are read by a person.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/history/graph": {
      "get": {
        "tags": [
          "Project history"
        ],
        "operationId": "getProjectHistoryGraph",
        "summary": "The activity graph of a run, agent, task or conversation",
        "description": "Built from what the project's workbenches uploaded, in the workbench's shared activity-graph shape. Members of the project read it, viewers too, with a sign-in or a device token; anyone else gets 404.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "required": true,
            "description": "What the graph is of.",
            "schema": {
              "type": "string",
              "enum": [
                "run",
                "agent",
                "task",
                "conversation"
              ]
            }
          },
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The run, agent, task or conversation. At most 300 characters.",
            "schema": {
              "type": "string",
              "maxLength": 300
            }
          },
          {
            "name": "team",
            "in": "query",
            "required": false,
            "description": "The team, for an agent or a task.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Start of the window, an ISO time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "End of the window, an ISO time.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "types",
            "in": "query",
            "required": false,
            "description": "A comma-separated list of node kinds to keep. Applied before the node cap. An unknown kind answers 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring to match in the nodes. At most 200 characters. Applied before the node cap.",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The activity graph.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The scope, id or a time is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a member of the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/history/runs": {
      "get": {
        "tags": [
          "Project history"
        ],
        "operationId": "getProjectHistoryRuns",
        "summary": "The project's runs timeline",
        "description": "The runs of the window with their counts. The window is the last seven days unless `from` and `to` say otherwise. Members of the project read it, viewers too; anyone else gets 404.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Start of the window, an ISO time. Seven days ago by default.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "End of the window, an ISO time. An hour from now by default.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "agent",
            "in": "query",
            "required": false,
            "description": "Only this agent's runs.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "team",
            "in": "query",
            "required": false,
            "description": "Only this team's runs.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "At most 2000.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2000,
              "default": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The runs timeline and its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A time is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a member of the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/roots/{rootId}": {
      "put": {
        "tags": [
          "Project queue"
        ],
        "operationId": "putProjectRoot",
        "summary": "Set a repository's clone of record or name",
        "description": "Owners, as a person. Names which node holds the canonical clone, and (from 0.34.0) a repository's `name`, in words for people. A body of only `name` renames the repository on every clone and touches nothing else. A repository removed in the last 30 days, put again, comes back at once. An archived project is read-only.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rootId",
            "in": "path",
            "required": true,
            "description": "The repository (letters, digits and _ . : -).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectRootPutInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The repository as the project now holds it.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectRoot"
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid, the root id is not, the node is not a node, or the name is empty.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "invalid_root",
                        "not_a_node"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such project, not an owner, or (with only `name`) no clone of that repository is on the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`same_remote`: another repository of the project has this remote (the body names it with `rootId` and `rootName`); or `archived`: the project is read-only until an owner restores it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "same_remote",
                        "archived"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "rootId": {
                      "type": "string"
                    },
                    "rootName": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Project queue"
        ],
        "operationId": "removeProjectRoot",
        "summary": "Remove a repository from the project",
        "description": "Owners. Without `confirm`, a repository with anything open answers 409 `root_has_work` with the counts. With it, the repository's open tasks are closed as cancelled, claims are released (reason `root_removed`), the repository leaves every `delegates` list and its live plans are abandoned. Its boards and map stay readable for 30 days.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rootId",
            "in": "path",
            "required": true,
            "description": "The repository.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "confirm",
            "in": "query",
            "required": false,
            "description": "Send `1` (or `true`) to remove the repository although work is open on it.",
            "schema": {
              "type": "string",
              "enum": [
                "1",
                "true"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "What the removal did.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "root": {
                      "type": "string"
                    },
                    "rootName": {
                      "type": "string"
                    },
                    "cancelled": {
                      "type": "integer",
                      "description": "Tasks closed as cancelled."
                    },
                    "released": {
                      "type": "integer",
                      "description": "Claims released."
                    },
                    "plans": {
                      "type": "integer",
                      "description": "Plans abandoned."
                    },
                    "keptUntil": {
                      "type": "string",
                      "format": "date-time",
                      "description": "After this, the repository's boards and map are dropped."
                    }
                  },
                  "required": [
                    "root",
                    "rootName",
                    "cancelled",
                    "released",
                    "plans",
                    "keptUntil"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The project's own level is not a repository.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_root"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`root_has_work`: tasks or plans are still open on the repository. `open` counts them (`tasks`, `claims`, `parts`, plans); send `confirm=1` to remove it anyway.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "root_has_work"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "open": {
                      "type": "object"
                    },
                    "rootId": {
                      "type": "string"
                    },
                    "rootName": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error",
                    "open"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/roots/{rootId}/classification": {
      "put": {
        "tags": [
          "Project queue"
        ],
        "operationId": "putProjectRootClassification",
        "summary": "Classify one repository of a project",
        "description": "A project's owners, as a person (AIOE 0.40.0). Sets the repository's classification, never weaker than its project's; `null` goes back to inheriting the project's. An archived project is read-only.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rootId",
            "in": "path",
            "required": true,
            "description": "The repository.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "classification": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The repository's classification, or `null` to inherit the project's."
                  }
                },
                "required": [
                  "classification"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The repository's classification as it now stands.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rootId": {
                      "type": "string"
                    },
                    "rootName": {
                      "type": "string"
                    },
                    "classification": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "effective": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "What applies: the repository's own, else the project's."
                    }
                  },
                  "required": [
                    "rootId",
                    "rootName",
                    "classification",
                    "effective"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid, or the repository is marked less strict than its project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "classification_weaker"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Only one of the project's owners classifies a repository.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such project, or no clone of that repository is on it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The project is archived and read-only until an owner restores it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "archived"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/agent-files": {
      "get": {
        "tags": [
          "Project queue"
        ],
        "operationId": "getProjectAgentFiles",
        "summary": "What each repository carries for agents",
        "description": "For members of the project (AIOE 0.40.0): each repository's instructions, hooks, skills, agents and MCP servers as its freshest reporting machine saw them, and whether the organisation has approved each server. A read; nothing is audited.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The repositories and their agent files.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "roots": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "summary": {
                      "type": "object",
                      "description": "Counts: `roots`, `withInstructions` and `ungovernedServers`."
                    }
                  },
                  "required": [
                    "roots",
                    "summary"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a member of the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/assurance": {
      "get": {
        "tags": [
          "Project queue"
        ],
        "operationId": "getProjectAssurance",
        "summary": "Which model providers a project may use",
        "description": "For members of the project (AIOE 0.40.0): the lowest assurance rating its classification allows, and for each provider and tier its rating, whether it is allowed and why.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The project's classification and the providers it allows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "classification": {
                      "type": "string"
                    },
                    "effective": {
                      "type": "object",
                      "properties": {
                        "minimumRating": {
                          "type": "string"
                        },
                        "providers": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "effective"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/assurance/v1/register.json": {
      "get": {
        "tags": [
          "Assurance"
        ],
        "operationId": "getAssuranceRegister",
        "summary": "The assurance register Mojo Up publishes",
        "description": "Public, no sign-in (AIOE 0.44.0). Served by Mojo Up AI Cloud only: its reviewed rating for each model provider and tier, which Enterprise deployments mirror. Carries an `ETag`; send it back in `If-None-Match` to get `304`. Any other deployment answers `404`.",
        "security": [],
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "The `ETag` of the copy you hold.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The register. Cached for five minutes.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The register: its version, review date and a row for each provider and tier."
                }
              }
            }
          },
          "304": {
            "description": "Unchanged since the `ETag` you sent."
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/me/conversations/{cid}/audience": {
      "put": {
        "tags": [
          "Project conversations"
        ],
        "operationId": "putProjectConversationAudience",
        "summary": "Share a conversation live, or take it back",
        "description": "The owner of one of their own Chat or Research conversations in a project (AIOE 0.41.0). Shares it with the whole project or with named members, or makes it private again (`person`). Only members of the project can be named. Audited.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cid",
            "in": "path",
            "required": true,
            "description": "The conversation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "audience": {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "enum": [
                          "person",
                          "project",
                          "members"
                        ]
                      },
                      "members": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id"
                          ]
                        },
                        "description": "For `members`: the people to share with."
                      }
                    },
                    "required": [
                      "kind"
                    ]
                  }
                },
                "required": [
                  "audience"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The conversation.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The conversation record with its audience as it now stands."
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid, or a named person is not a member of the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "not_a_member"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "The conversation is shared with you; only its owner shares it on.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "owner_only"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/conversations/shared": {
      "get": {
        "tags": [
          "Project conversations"
        ],
        "operationId": "getSharedProjectConversations",
        "summary": "Conversations shared with me",
        "description": "For members of the project (AIOE 0.41.0): the Chat and Research conversations people shared live with the caller or with the whole project, each with its owner.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "`chat` or `research`; both by default.",
            "schema": {
              "type": "string",
              "enum": [
                "chat",
                "research"
              ]
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only changes after this sequence number.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "At most 500.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The shared conversations, each with its `owner`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "seq": {
                      "type": "integer"
                    },
                    "conversations": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "seq",
                    "conversations"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/conversations/{principal}/{cid}": {
      "get": {
        "tags": [
          "Project conversations"
        ],
        "operationId": "getProjectConversation",
        "summary": "Read a person's conversation",
        "description": "For members of the project (AIOE 0.41.0): the owner's own conversation, or one shared with the caller. Anything else answers not found, so changing an audience does not reveal that a conversation exists.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "principal",
            "in": "path",
            "required": true,
            "description": "The conversation's owner.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cid",
            "in": "path",
            "required": true,
            "description": "The conversation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The conversation.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The conversation record with its `owner`."
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/conversations/{principal}/{cid}/messages": {
      "get": {
        "tags": [
          "Project conversations"
        ],
        "operationId": "getProjectConversationMessages",
        "summary": "Read a conversation's messages",
        "description": "For members of the project (AIOE 0.41.0): a page of the messages of a conversation the caller may read (see the conversation itself).",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "principal",
            "in": "path",
            "required": true,
            "description": "The conversation's owner.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cid",
            "in": "path",
            "required": true,
            "description": "The conversation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "description": "Only entries after this sequence number.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "At most 500.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of messages.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "more": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "entries",
                    "more"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/people/v1/me/live": {
      "get": {
        "tags": [
          "Live sessions"
        ],
        "operationId": "getMyLiveSessions",
        "summary": "My live sessions",
        "description": "The signed-in person's own sessions on every machine, newest report first, each with the machine, whether it is online, and `canControl` (always true here). Taken from the list each machine reported on its heartbeat (AIOE 0.43.0). The live detail and every action go over the relay.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sessions.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "sessions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "deviceId": {
                            "type": "string"
                          },
                          "deviceName": {
                            "type": "string"
                          },
                          "online": {
                            "type": "boolean"
                          },
                          "lastSeenAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "session": {
                            "type": "object"
                          },
                          "projectId": {
                            "type": "string"
                          },
                          "projectName": {
                            "type": "string"
                          },
                          "canControl": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "deviceId",
                          "deviceName",
                          "online",
                          "lastSeenAt",
                          "session",
                          "canControl"
                        ]
                      }
                    }
                  },
                  "required": [
                    "sessions"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/live": {
      "get": {
        "tags": [
          "Live sessions"
        ],
        "operationId": "getProjectLiveSessions",
        "summary": "A project's live sessions",
        "description": "The project's sessions the caller may watch (AIOE 0.43.0): their own, any Team Work, and conversations shared with the project or with them. `canControl` is true only for the caller's own sessions; everyone else may only watch.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sessions.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "sessions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "deviceId": {
                            "type": "string"
                          },
                          "deviceName": {
                            "type": "string"
                          },
                          "online": {
                            "type": "boolean"
                          },
                          "lastSeenAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "session": {
                            "type": "object"
                          },
                          "projectId": {
                            "type": "string"
                          },
                          "projectName": {
                            "type": "string"
                          },
                          "canControl": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "deviceId",
                          "deviceName",
                          "online",
                          "lastSeenAt",
                          "session",
                          "canControl"
                        ]
                      }
                    }
                  },
                  "required": [
                    "sessions"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/parts": {
      "post": {
        "tags": [
          "Project queue"
        ],
        "operationId": "placeProjectPart",
        "summary": "Place a part of a project task on a machine",
        "description": "A contributor or better. Sends the part to an online device that holds the repository. When nobody holding it is online the part is kept at the home and placed on the holder's next registration or heartbeat (`waiting_for_device`). Audited as `part.place`.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartRequestInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The part was placed, or is kept until a machine holding the repository is online.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "partId": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "placed",
                        "waiting_for_device"
                      ]
                    },
                    "rootName": {
                      "type": "string",
                      "description": "The repository's name."
                    }
                  },
                  "required": [
                    "partId",
                    "state",
                    "rootName"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a contributor on the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The project has no such task, or the repository is not one of its repositories.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found",
                        "unknown_root"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "502": {
            "description": "The machine refused the part; the message says why.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "refused"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Project queue"
        ],
        "operationId": "listProjectParts",
        "summary": "List the parts placed from the project",
        "description": "Newest first. A viewer or better. A part still waiting carries `waitingFor`, for example \"waiting for a machine with api\".",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectTask",
            "in": "query",
            "required": false,
            "description": "Only the parts of this project task (its uid).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The parts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "parts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "partId": {
                            "type": "string"
                          },
                          "projectTask": {
                            "type": "string"
                          },
                          "rootId": {
                            "type": "string"
                          },
                          "rootName": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "state": {
                            "type": "string",
                            "enum": [
                              "placing",
                              "placed",
                              "waiting_for_device"
                            ]
                          },
                          "requestedBy": {
                            "type": "string"
                          },
                          "requestedAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "placedAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "deviceName": {
                            "type": "string"
                          },
                          "waitingFor": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "partId",
                          "projectTask",
                          "rootId",
                          "rootName",
                          "title",
                          "state",
                          "requestedBy",
                          "requestedAt"
                        ]
                      }
                    }
                  },
                  "required": [
                    "parts"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a member of the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/queue/leases/renew": {
      "post": {
        "tags": [
          "Project queue"
        ],
        "operationId": "renewQueueLeases",
        "summary": "Keep the tasks a machine holds",
        "description": "One call renews many leases and names the ones the caller has lost, with the reason: `taken_over`, `released`, `lapsed`, `revoked`, `done` or `not_found`. A contributor or better.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "leases": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 200,
                    "items": {
                      "type": "object",
                      "properties": {
                        "rootId": {
                          "type": "string"
                        },
                        "board": {
                          "type": "string"
                        },
                        "taskId": {
                          "type": "string"
                        },
                        "epoch": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "The claim's epoch, as the caller last saw it."
                        },
                        "sessionId": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "rootId",
                        "board",
                        "taskId",
                        "epoch"
                      ]
                    }
                  }
                },
                "required": [
                  "leases"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The leases renewed, and the ones lost.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "leaseSeconds": {
                      "type": "integer"
                    },
                    "renewed": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rootId": {
                            "type": "string"
                          },
                          "board": {
                            "type": "string"
                          },
                          "taskId": {
                            "type": "string"
                          },
                          "epoch": {
                            "type": "integer"
                          },
                          "leaseUntil": {
                            "type": "string",
                            "format": "date-time"
                          }
                        }
                      }
                    },
                    "lost": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rootId": {
                            "type": "string"
                          },
                          "board": {
                            "type": "string"
                          },
                          "taskId": {
                            "type": "string"
                          },
                          "reason": {
                            "type": "string",
                            "enum": [
                              "taken_over",
                              "released",
                              "lapsed",
                              "revoked",
                              "done",
                              "not_found"
                            ]
                          },
                          "by": {
                            "type": "string"
                          },
                          "byName": {
                            "type": "string"
                          },
                          "byDeviceName": {
                            "type": "string"
                          },
                          "at": {
                            "type": "string",
                            "format": "date-time"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "leaseSeconds",
                    "renewed",
                    "lost"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not a contributor on the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/queue/claim/{taskId}/takeover": {
      "post": {
        "tags": [
          "Project queue"
        ],
        "operationId": "takeOverQueueClaim",
        "summary": "Take a claimed task from the machine holding it",
        "description": "The claim's own person from any device, the task's assignee, or an owner may take it; an agent for the operations manager only once the claim is stale. The task goes back to the queue, or, with `deviceId`, to that device (the caller's own, or one that reaches the project) at the next epoch. `ifEpoch` fences the call: a claim that has moved on is refused.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "description": "The claimed task.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rootId",
            "in": "query",
            "required": true,
            "description": "The board's root.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "board",
            "in": "query",
            "required": true,
            "description": "The board.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ifEpoch": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The claim's epoch the caller saw."
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "requeue": {
                    "type": "boolean",
                    "default": true,
                    "description": "Put an in-progress task back to todo; false leaves its status. Ignored with `deviceId`."
                  },
                  "deviceId": {
                    "type": "string",
                    "description": "Send the task to this device: the claim moves to it at epoch + 1."
                  },
                  "sessionId": {
                    "type": "string"
                  },
                  "force": {
                    "type": "boolean",
                    "default": false,
                    "description": "Take it although the lease is fresh: an owner, or the claim's own person."
                  }
                },
                "required": [
                  "ifEpoch"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The task, the new claim and the one taken over.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "task": {
                      "type": "object"
                    },
                    "claimedBy": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "The new claim when the task went to a device, else null."
                    },
                    "previous": {
                      "type": "object",
                      "description": "The claim that was taken over."
                    }
                  },
                  "required": [
                    "task",
                    "claimedBy",
                    "previous"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The board or body is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not allowed to take this claim.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The claim has moved on, the lease is still fresh, or the device is offline. The body says which.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/queue/claim/{taskId}": {
      "delete": {
        "tags": [
          "Project queue"
        ],
        "operationId": "releaseQueueClaim",
        "summary": "Release a claimed task",
        "description": "A device names the claim's `epoch` and releases it. A person releases without one: the person working on the task, or an owner. The task goes back to the queue.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "description": "The claimed task.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rootId",
            "in": "query",
            "required": true,
            "description": "The board's root.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "board",
            "in": "query",
            "required": true,
            "description": "The board.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "epoch",
            "in": "query",
            "required": false,
            "description": "The claim's whole-number epoch. A device must send it; a claim that has moved on is refused.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The task, back in the queue.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The board or epoch is not valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not the person working on it, or an owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such task, or it is not claimed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The epoch is not the claim's, or a device sent none.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/submissions/design-system": {
      "post": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "submitDesignSystem",
        "summary": "Submit a design system",
        "description": "A member sends a design-system zip (raw bytes, or a multipart file; at most 40 MB). It is checked and its files stored on arrival. An administrator, or anyone where members may publish, publishes it at once (201); otherwise it waits for review (202, its files held 30 days). A device token or a person's sign-in works.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/zip": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Published.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "state": {
                      "type": "string",
                      "enum": [
                        "published"
                      ]
                    },
                    "id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "state",
                    "id"
                  ]
                }
              }
            }
          },
          "202": {
            "description": "Waiting for review.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "state": {
                      "type": "string",
                      "enum": [
                        "pending"
                      ]
                    },
                    "submissionId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "state",
                    "submissionId"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The zip could not be read; `problems` says why, in words.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_design_system"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Submissions are off for this organisation.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_allowed"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/design-systems/{id}/export.zip": {
      "get": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "exportDesignSystem",
        "summary": "Download a published design system",
        "description": "The published system as the zip an administrator's export gives, which a team hub imports. Supports `If-None-Match`. Audited once per device (or person) per version.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The design system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The zip.",
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Unchanged since the ETag you sent."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/design-systems/{id}/checklist": {
      "get": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "getDesignSystemChecklist",
        "summary": "A design system's review checklist",
        "description": "The rules to review work against, for the version the catalogue serves (or an earlier kept version with `version`). They come from the system's component rules, then its voice, then the checklist lists in its reference files, each with an id (`rule-1`, `voice-1`, `check-1`) at most 200 in all. A device (a desktop or a node) or a person of the organisation can read it.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The design system.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "An earlier kept version. Absent, the version the catalogue serves.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The version and its rules.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "version": {
                      "type": "string"
                    },
                    "rules": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "text": {
                            "type": "string"
                          },
                          "detail": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "version",
                    "rules"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/design-systems/{id}/review": {
      "post": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "submitDesignSystemReview",
        "summary": "Record a design review",
        "description": "An agent, or a person, reports what it found when it reviewed work against the system's checklist. Send exactly one of `html` (the page, at most 2 MB; it is hashed and measured, never kept) and `description` (a screenshot or the work in words, at most 16 KiB; kept). `checked` lists the rule ids looked at (absent, every rule); a rule a finding names counts as checked. The review is kept with the version and shown to administrators beside it.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The design system.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesignSystemReviewSubmitInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The review.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The review as kept: `id`, `entryId`, `version`, `at`, `by`, `byName`, `deviceId`, `agent`, `subject` (kind, title, sha256, bytes or description), `checked`, `findings` and `summary`."
                }
              }
            }
          },
          "400": {
            "description": "The review does not read; `problems` names each rule id that is not in the checklist, or what else is wrong.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_review"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "That version has no component rules to review against. Add some and publish a new version.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "no_rules"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/catalogue/v1/design-systems/{id}/reviews": {
      "get": {
        "tags": [
          "Catalogue"
        ],
        "operationId": "listDesignSystemReviews",
        "summary": "Reviews of a design system",
        "description": "The reviews sent for the system, newest first.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The design system.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "Only reviews of this version.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many to return. 20 by default, at most 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The reviews.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "reviews": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "reviews"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/teams/{teamId}": {
      "get": {
        "tags": [
          "Project teams"
        ],
        "operationId": "getProjectTeam",
        "summary": "One team or specialist of the project",
        "description": "The team exactly as the project's team list gives it (AIOE 0.49.0). A copy that was merged into another team answers 410 `merged` with `into`, so a workbench can follow it without making a change; anything the project does not use answers 404.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "The team or specialist.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The team.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The copy was merged into another team: `into` names it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "merged"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Project teams"
        ],
        "operationId": "putProjectTeam",
        "summary": "Create or update a team or specialist of the project",
        "description": "The project's owners and contributors, with a sign-in or a desktop's token. A body of exactly `{ \"use\": true }` takes an organisation team the caller can see into this project (`{ \"use\": false }` stops using it here), instead of answering `id_taken` (AIOE 0.47.0). A copy merged into another team answers 410 `merged` with `into`. A key left out stays as stored and `null` clears it. A team new here is granted to this project alone; which projects and pools a team is granted to stays a portfolio manager's. The answer is the team with `memberSchema` 2, `ignored[]` (keys the platform did not take) and `refused[]` (field changes that lost to a newer edit, each with `path`, `ours` and `theirs`). `201` when created, `200` when updated.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "The team or specialist. Lower-case letters, digits and `-`, at most 100 characters.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The team as the workbench saves it, with every member field.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The team, updated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "memberSchema": {
                      "type": "integer",
                      "enum": [
                        2
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "team",
                        "specialist"
                      ]
                    },
                    "ignored": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "refused": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "path": {
                            "type": "string"
                          },
                          "ours": {},
                          "theirs": {}
                        },
                        "required": [
                          "path"
                        ]
                      }
                    }
                  },
                  "required": [
                    "memberSchema",
                    "ignored",
                    "refused"
                  ]
                }
              }
            }
          },
          "201": {
            "description": "The team, created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "memberSchema": {
                      "type": "integer",
                      "enum": [
                        2
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "team",
                        "specialist"
                      ]
                    },
                    "ignored": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "refused": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "memberSchema",
                    "ignored",
                    "refused"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The id or body is not valid, a field is not one the team may carry (`field_not_allowed`, with its `path`), or the team has problems.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "field_not_allowed",
                        "invalid_team"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner or contributor, or the body changes the projects a team is granted to.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "The id belongs to an organisation team this project does not use, or the id, kind or member schema changed (`version_conflict` carries `current`).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "id_taken",
                        "exists",
                        "version_conflict"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "410": {
            "description": "The id is a copy that was merged into another team: `into` names it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "merged"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Project teams"
        ],
        "operationId": "deleteProjectTeam",
        "summary": "Remove a team or specialist of the project",
        "description": "The project's owners and contributors. Only a team granted to this project alone can be removed here.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "The team or specialist.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner or contributor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`shared_team`: other projects use the team too (`projects[]`); ask a portfolio manager. `specialist_in_use`: teams still use this specialist (`teams[]`).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "shared_team",
                        "specialist_in_use"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/portfolio/v1/teams/vocabulary": {
      "get": {
        "tags": [
          "Project teams"
        ],
        "operationId": "getTeamsVocabulary",
        "summary": "The words a team editor offers",
        "description": "The union of the `teams` blocks of the policy manifests the organisation holds, the newest build's word first where two disagree. With none held, the workbench's role words and thinking levels stand alone and the runtime and model lists are empty. For a person or their desktop.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The vocabulary.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "roles": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "words": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "runtimes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "thinkingLevels": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "models": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "from": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "digest": {
                            "type": "string"
                          },
                          "versions": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "roles",
                    "runtimes",
                    "thinkingLevels",
                    "models",
                    "from"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "A person or their desktop reads it.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/saved-teams": {
      "get": {
        "tags": [
          "Saved teams"
        ],
        "operationId": "listProjectSavedTeams",
        "summary": "Teams saved for the project",
        "description": "The teams saved for this project, for members of the project. A contributor or owner saves one with `PUT /projects/v1/{id}/saved-teams/{teamId}`, the workbench's team as it is saved.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The saved teams.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "teams": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "teams"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/my-tasks/v1": {
      "get": {
        "tags": [
          "My tasks"
        ],
        "operationId": "listMyTasks",
        "summary": "The tasks assigned to the caller",
        "description": "The tasks assigned to the signed-in person across the projects they belong to, as a person or a desktop's token for one. Blocked first, then under way, in review, to do, then the rest; newest change first within each. A caller that is not a person is refused 403.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "`open` (the default) leaves done and cancelled tasks out; `all` keeps them.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "all"
              ],
              "default": "open"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tasks, each with its project, the caller's role there, its board and the task.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tasks": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  },
                  "required": [
                    "tasks"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Tasks belong to a person.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/me/notifications/v1": {
      "get": {
        "tags": [
          "Notification preferences"
        ],
        "operationId": "getNotificationPreferences",
        "summary": "The caller's notification preferences",
        "description": "The person's email digest cadence and hour, quiet hours, time zone and for-you choice, with the zone in force, the organisation's zone, whether this platform can send email at all and whether it is quiet now. A person's sign-in, or a desktop's device token for one, so a workbench's own quiet hours can follow the platform's. A device with no person behind it is refused.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The preferences.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreferences"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "The credential names no person.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Notification preferences"
        ],
        "operationId": "putNotificationPreferences",
        "summary": "Replace the caller's notification preferences",
        "description": "A person's sign-in only, not a device token. The whole set is replaced. The digest goes to the address on the verified sign-in; nothing in the body can set it. Turning the digest on starts its clock now, so the first email goes at the next slot and not at once for a slot already past. Quiet hours hold a phone's buzz, never the record in the inbox.",
        "security": [
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationPreferencesInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved; the preferences as they now stand.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreferences"
                }
              }
            }
          },
          "400": {
            "description": "The body is not a set of preferences; `issues` says what.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/local-boards": {
      "get": {
        "tags": [
          "Project trackers"
        ],
        "operationId": "listProjectLocalBoards",
        "summary": "The boards kept on a workbench",
        "description": "Boards a workbench keeps for this project's repository and has not promoted to the platform, with the tracker mirror each writes. Live reports only: a board counts while its device is online. A board every member workbench reports is one entry, its other devices listed in `alsoOn` and its agents summed. A platform tracker for a target a live mirror already writes is refused (409 `mirror_conflict`). Members of the project, viewers too.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The boards.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "boards": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "device": {
                            "type": "string",
                            "description": "The reporting device."
                          },
                          "deviceName": {
                            "type": "string"
                          },
                          "rootId": {
                            "type": "string",
                            "description": "The repository's id on the workbench."
                          },
                          "repositoryName": {
                            "type": "string",
                            "description": "The repository's name when the platform knows it."
                          },
                          "board": {
                            "type": "string",
                            "description": "The board's name on the workbench, empty when it has only the one."
                          },
                          "agents": {
                            "type": "integer",
                            "description": "Agents busy on the board, summed over every device that reports it."
                          },
                          "mirror": {
                            "type": "object",
                            "description": "The tracker the board mirrors to.",
                            "properties": {
                              "provider": {
                                "type": "string",
                                "enum": [
                                  "github-issues",
                                  "azure-devops",
                                  "jira"
                                ]
                              },
                              "target": {
                                "type": "string"
                              },
                              "since": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "provider",
                              "target"
                            ]
                          },
                          "lastSeenAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "alsoOn": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "The other devices reporting the same board."
                          }
                        },
                        "required": [
                          "device",
                          "deviceName",
                          "rootId",
                          "board",
                          "agents",
                          "lastSeenAt"
                        ]
                      }
                    }
                  },
                  "required": [
                    "boards"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/join-requests": {
      "get": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "listMyJoinRequests",
        "summary": "The caller's requests to join projects",
        "description": "The requests to join a project the caller has made, as a person.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requests.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Requests are read as a person.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/join-request": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "requestToJoinProject",
        "summary": "Ask to join a project",
        "description": "Asks the project's owners to let the caller in. Done as a person.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "note": {
                    "type": "string",
                    "maxLength": 500
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request, or what already stands.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The body is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Asking to join is done as a person.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/requests": {
      "get": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "listProjectRequests",
        "summary": "Requests waiting on a project's owners",
        "description": "The pending requests to join the project, or to merge another project into it. Owners only; anyone else is answered 404.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The pending requests.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/join-requests/{requestId}/approve": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "approveProjectRequest",
        "summary": "Approve a request",
        "description": "Approves a request that belongs to this project. The body may carry a `reason` of at most 2000 characters.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "description": "The request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "maxLength": 2000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The decision.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not the project's owner, or an administrator.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/join-requests/{requestId}/decline": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "declineProjectRequest",
        "summary": "Decline a request",
        "description": "Declines a request that belongs to this project. The body may carry a `reason` of at most 2000 characters.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "description": "The request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "maxLength": 2000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The decision.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not the project's owner, or an administrator.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/merge": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "mergeProject",
        "summary": "Merge a project into another",
        "description": "Owners of the source project, or an administrator. `dryRun=1` answers what would move, with a sentence, and changes nothing. Otherwise the merge waits on the target's owners' approval and answers with the request; it happens at once when the caller owns both projects, or with `force: true` for an administrator.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project to merge away.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dryRun",
            "in": "query",
            "required": false,
            "description": "`1` or `true` to preview only.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "into": {
                    "type": "string"
                  },
                  "force": {
                    "type": "boolean"
                  },
                  "note": {
                    "type": "string"
                  }
                },
                "required": [
                  "into"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The preview, or the merge done.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The body is malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner, or `force` without being an administrator.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/archive": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "archiveProject",
        "summary": "Archive a project",
        "description": "Owners, or an administrator. A project already archived or merged answers 409.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The project, archived.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Already archived, or merged into another project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "archived",
                        "merged"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/restore": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "restoreProject",
        "summary": "Restore an archived project",
        "description": "Owners, or an administrator.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The project, restored.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Not archived, or merged into another project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_archived",
                        "merged"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/projects/v1/{id}/transfer": {
      "post": {
        "tags": [
          "Project lifecycle"
        ],
        "operationId": "transferProject",
        "summary": "Hand a project to a new owner",
        "description": "One of the owners, or an administrator. The new owner is a person who has signed in to the organisation. An archived or merged project is restored first.",
        "security": [
          {
            "deviceToken": []
          },
          {
            "personToken": []
          },
          {
            "cloudSession": []
          }
        ],
        "parameters": [
          {
            "name": "X-Aioe-Organisation",
            "in": "header",
            "required": false,
            "description": "Mojo Up AI Cloud only, with a person's access token: the id of the organisation the request is for. A person's session is not tied to one organisation, so each request names it. Device tokens already carry their organisation.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "to": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "to"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The project, with its new owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "The body is malformed, or that person has not signed in here.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid_request",
                        "unknown_person"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "No valid access token.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "unauthorized"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Not an owner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "forbidden"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found, or not yours to see.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "not_found"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Restore the project first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "archived",
                        "merged"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "error_description": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "error"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/ServiceProviderConfig": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "getScimServiceProviderConfig",
        "summary": "What the SCIM service supports",
        "description": "Mojo Up AI Cloud only. The SCIM 2.0 service provider configuration (RFC 7643): patch, filter and the bearer-token authentication supported; bulk, sort, ETags and password changes are not. Every SCIM route takes the team's SCIM token as `Authorization: Bearer aioe_sc_…`, and answers in `application/scim+json`.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "The configuration.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/ResourceTypes": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "listScimResourceTypes",
        "summary": "Resource types",
        "description": "The resource types served: `User` and `Group`.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "A SCIM list response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/ResourceTypes/{id}": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "getScimResourceType",
        "summary": "One resource type",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "`User` or `Group`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The resource type.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Schemas": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "listScimSchemas",
        "summary": "Schemas",
        "description": "The schemas of the user and group resources the service accepts.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "A SCIM list response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Schemas/{id}": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "getScimSchema",
        "summary": "One schema",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The schema's URN.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The schema.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Users": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "listScimUsers",
        "summary": "List users",
        "description": "The people the identity provider has provisioned into the team. Filters are `attr op value` with `eq`, `ne`, `co`, `sw`, `ew` and `pr`, joined by `and`; `userName` compares without regard to case. `or`, `not` and parentheses answer `invalidFilter`.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "description": "A SCIM filter, for example `userName eq \"dana@example.com.au\"`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "At most 200.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A SCIM list response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "SCIM"
        ],
        "operationId": "createScimUser",
        "summary": "Provision a user",
        "description": "Adds a person to the team. Their address (the primary email, else the first, else a `userName` that is an address) must be in one of the team's verified domains. A person who already proved the address is that person; otherwise an account is made that signs in through the team's provider. `active: true` makes them a member, within the team's seats and plan quota.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The user.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Users/{id}": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "getScimUser",
        "summary": "Get a user",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM user id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The user.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "SCIM"
        ],
        "operationId": "replaceScimUser",
        "summary": "Replace a user",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM user id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The user.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "SCIM"
        ],
        "operationId": "patchScimUser",
        "summary": "Change a user",
        "description": "A SCIM PatchOp. `add`, `replace` and `remove` (any case) work on `active`, `userName`, `externalId`, `displayName`, `name` and its parts, `emails` and `emails[type eq \"work\"].value`. Booleans may be strings (`\"False\"`, as Entra sends). An operation without a path takes an object of attributes.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM user id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The user.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "SCIM"
        ],
        "operationId": "deleteScimUser",
        "summary": "Remove a user",
        "description": "Takes the person out of the team as if an owner removed them (their desktops, roles, project places and work claims go with them) and signs them out of Cloud everywhere. The team's last owner is never removed this way (409). `active: false` does the same.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM user id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed."
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Groups": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "listScimGroups",
        "summary": "List groups",
        "description": "Groups from the identity provider. Members of the owners' group (`owners` unless an owner names another) are owners of the team; members of any other group are members. `excludedAttributes=members` leaves the member lists out.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "description": "A SCIM filter, for example `userName eq \"dana@example.com.au\"`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "At most 200.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 200
            }
          },
          {
            "name": "excludedAttributes",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "members"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A SCIM list response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "SCIM"
        ],
        "operationId": "createScimGroup",
        "summary": "Create a group",
        "security": [
          {
            "scimToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The group.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/scim/v2/Groups/{id}": {
      "get": {
        "tags": [
          "SCIM"
        ],
        "operationId": "getScimGroup",
        "summary": "Get a group",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM group id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The group.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "SCIM"
        ],
        "operationId": "replaceScimGroup",
        "summary": "Replace a group",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM group id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The group.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "SCIM"
        ],
        "operationId": "patchScimGroup",
        "summary": "Change a group",
        "description": "A SCIM PatchOp on `displayName`, `externalId`, `members` and `members[value eq \"<id>\"]`. A change that would leave the team without an owner is refused.",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM group id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/scim+json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The group.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A SCIM 2.0 resource or list response (`schemas`, then the resource's attributes, or `totalResults`, `startIndex`, `itemsPerPage` and `Resources`)."
                }
              }
            }
          },
          "400": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "SCIM"
        ],
        "operationId": "deleteScimGroup",
        "summary": "Delete a group",
        "security": [
          {
            "scimToken": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The SCIM group id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted."
          },
          "401": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "A SCIM error: `schemas` of `urn:ietf:params:scim:api:messages:2.0:Error`, `status`, `scimType` and `detail`. 401 is a missing or revoked token, 402 is a team whose plan has lapsed, 429 is over the per-token rate limit.",
            "content": {
              "application/scim+json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schemas": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "status": {
                      "type": "string"
                    },
                    "scimType": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/status/v1": {
      "get": {
        "tags": [
          "Status"
        ],
        "operationId": "getStatus",
        "summary": "Platform status",
        "description": "Public, without sign-in and without tenant data. Whether the deployment is up, each part of it (API, database, Redis, relay, mesh, releases), and the incidents its administrators have written. Checks run on a cadence and are cached, so every replica answers the same.",
        "security": [],
        "responses": {
          "200": {
            "description": "The status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusSummary"
                }
              }
            }
          }
        }
      }
    },
    "/healthz": {
      "get": {
        "tags": [
          "Health"
        ],
        "operationId": "health",
        "summary": "Liveness",
        "description": "Public. Answers while the process is up, with its version.",
        "security": [],
        "responses": {
          "200": {
            "description": "Up.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "version": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "ok"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/readyz": {
      "get": {
        "tags": [
          "Health"
        ],
        "operationId": "ready",
        "summary": "Readiness",
        "description": "Public. Answers when the API is ready for traffic.",
        "security": [],
        "responses": {
          "200": {
            "description": "Ready.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "ok"
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Catalogue": {
        "type": "object",
        "properties": {
          "version": {
            "type": "number",
            "const": 1
          },
          "publishedAt": {
            "type": "string"
          },
          "entries": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 100
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "team",
                    "role",
                    "skill",
                    "prompt",
                    "mcp",
                    "document",
                    "agent",
                    "instruction",
                    "hook",
                    "plugin",
                    "marketplace",
                    "design-system",
                    "model",
                    "evaluation"
                  ]
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "summary": {
                  "type": "string",
                  "maxLength": 2000
                },
                "version": {
                  "type": "string",
                  "maxLength": 40
                },
                "content": {},
                "fit": {
                  "type": "object",
                  "properties": {
                    "modelClass": {
                      "type": "string",
                      "enum": [
                        "fast",
                        "standard",
                        "strong"
                      ]
                    },
                    "suits": {
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 40
                      }
                    },
                    "tools": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      }
                    },
                    "stacks": {
                      "maxItems": 20,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 40
                      }
                    }
                  },
                  "additionalProperties": false
                },
                "delivery": {
                  "type": "string",
                  "enum": [
                    "offered",
                    "installed"
                  ]
                },
                "files": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "evaluation": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "type": "string"
                    },
                    "deviceId": {
                      "type": "string"
                    },
                    "deviceName": {
                      "type": "string"
                    },
                    "contentDigest": {
                      "type": "string",
                      "pattern": "^[0-9a-f]{64}$"
                    },
                    "worker": {
                      "type": "string"
                    },
                    "judge": {
                      "type": "string"
                    },
                    "result": {
                      "type": "object",
                      "properties": {
                        "worker": {
                          "type": "string",
                          "maxLength": 200
                        },
                        "judge": {
                          "type": "string",
                          "maxLength": 200
                        },
                        "tasks": {
                          "maxItems": 5,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 40
                              },
                              "withSkill": {
                                "type": "object",
                                "properties": {
                                  "passed": {
                                    "type": "boolean"
                                  },
                                  "tokens": {
                                    "type": "number",
                                    "minimum": 0
                                  },
                                  "ms": {
                                    "type": "number",
                                    "minimum": 0
                                  },
                                  "sentence": {
                                    "type": "string",
                                    "maxLength": 500
                                  }
                                },
                                "required": [
                                  "passed",
                                  "tokens",
                                  "ms",
                                  "sentence"
                                ],
                                "additionalProperties": false
                              },
                              "without": {
                                "type": "object",
                                "properties": {
                                  "passed": {
                                    "type": "boolean"
                                  },
                                  "tokens": {
                                    "type": "number",
                                    "minimum": 0
                                  },
                                  "ms": {
                                    "type": "number",
                                    "minimum": 0
                                  },
                                  "sentence": {
                                    "type": "string",
                                    "maxLength": 500
                                  }
                                },
                                "required": [
                                  "passed",
                                  "tokens",
                                  "ms",
                                  "sentence"
                                ],
                                "additionalProperties": false
                              },
                              "loaded": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "withSkill",
                              "without",
                              "loaded"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "unrelated": {
                          "maxItems": 2,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 40
                              },
                              "loaded": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "loaded"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "necessity": {
                          "type": "string",
                          "enum": [
                            "needed",
                            "helps",
                            "not-needed"
                          ]
                        },
                        "retrieval": {
                          "type": "string",
                          "enum": [
                            "right",
                            "missed",
                            "over-eager",
                            "untested"
                          ]
                        },
                        "verdict": {
                          "type": "string",
                          "enum": [
                            "pass",
                            "fail"
                          ]
                        },
                        "sentence": {
                          "type": "string",
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "worker",
                        "judge",
                        "tasks",
                        "unrelated",
                        "necessity",
                        "retrieval",
                        "verdict",
                        "sentence"
                      ],
                      "additionalProperties": false
                    },
                    "stale": {
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "at",
                    "deviceId",
                    "deviceName",
                    "contentDigest",
                    "worker",
                    "judge",
                    "result"
                  ],
                  "additionalProperties": false
                },
                "loads90d": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "lastLoadedAt": {
                  "type": "string"
                },
                "evaluating": {
                  "type": "object",
                  "properties": {
                    "orderId": {
                      "type": "string"
                    },
                    "deviceId": {
                      "type": "string"
                    },
                    "deviceName": {
                      "type": "string"
                    },
                    "issuedAt": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "done",
                        "failed",
                        "refused",
                        "expired"
                      ]
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "orderId",
                    "deviceId",
                    "deviceName",
                    "issuedAt",
                    "state"
                  ],
                  "additionalProperties": false
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "published",
                    "archived"
                  ]
                },
                "pinned": {
                  "type": "boolean"
                },
                "changedAt": {
                  "type": "string"
                },
                "usedByTeams": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "scan": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "type": "string"
                    },
                    "level": {
                      "type": "string",
                      "enum": [
                        "clean",
                        "caution",
                        "dangerous"
                      ]
                    },
                    "findings": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rule": {
                            "type": "string",
                            "maxLength": 60
                          },
                          "words": {
                            "type": "string",
                            "maxLength": 300
                          },
                          "where": {
                            "type": "string",
                            "maxLength": 220
                          },
                          "line": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "rule",
                          "words",
                          "where"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "at",
                    "level",
                    "findings"
                  ],
                  "additionalProperties": false
                },
                "verified": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "type": "string"
                    },
                    "fingerprint": {
                      "type": "string",
                      "pattern": "^[0-9a-f]{64}$"
                    },
                    "deviceId": {
                      "type": "string"
                    },
                    "deviceName": {
                      "type": "string"
                    },
                    "tools": {
                      "maxItems": 500,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "maxLength": 200
                      }
                    },
                    "undeclared": {
                      "maxItems": 500,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "maxLength": 200
                      }
                    },
                    "missing": {
                      "maxItems": 500,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "maxLength": 200
                      }
                    },
                    "sentence": {
                      "type": "string",
                      "maxLength": 500
                    },
                    "stale": {
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "at",
                    "fingerprint",
                    "deviceId",
                    "deviceName",
                    "tools",
                    "undeclared",
                    "missing",
                    "sentence"
                  ],
                  "additionalProperties": false
                },
                "verifying": {
                  "type": "object",
                  "properties": {
                    "orderId": {
                      "type": "string"
                    },
                    "deviceId": {
                      "type": "string"
                    },
                    "deviceName": {
                      "type": "string"
                    },
                    "issuedAt": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "done",
                        "failed",
                        "refused",
                        "expired"
                      ]
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "orderId",
                    "deviceId",
                    "deviceName",
                    "issuedAt",
                    "state"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "kind",
                "name",
                "content"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "version",
          "entries"
        ],
        "additionalProperties": false
      },
      "CloudInvitation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          },
          "invitedBy": {
            "type": "string"
          },
          "invitedByName": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "email",
          "role",
          "invitedBy",
          "createdAt",
          "expiresAt"
        ],
        "additionalProperties": false
      },
      "CloudMe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "picture": {
            "type": "string"
          },
          "organisations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "personal",
                    "team"
                  ]
                },
                "plan": {
                  "type": "string",
                  "enum": [
                    "free",
                    "teams"
                  ]
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "owner",
                    "admin",
                    "member",
                    "viewer"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "kind",
                "plan",
                "role"
              ],
              "additionalProperties": false
            }
          },
          "signInMethods": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "google",
                    "github",
                    "microsoft",
                    "facebook",
                    "email"
                  ]
                },
                "email": {
                  "type": "string"
                },
                "emailVerified": {
                  "type": "boolean"
                },
                "createdAt": {
                  "type": "string"
                },
                "lastUsedAt": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "provider",
                "emailVerified",
                "createdAt",
                "lastUsedAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "organisations",
          "signInMethods"
        ],
        "additionalProperties": false
      },
      "CloudMember": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          },
          "joinedAt": {
            "type": "string"
          }
        },
        "required": [
          "userId",
          "role",
          "joinedAt"
        ],
        "additionalProperties": false
      },
      "CloudRunCreated": {
        "type": "object",
        "properties": {
          "runId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "mcp": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "maxLength": 2000,
                "format": "uri"
              },
              "token": {
                "type": "string",
                "minLength": 16,
                "maxLength": 4000
              },
              "expiresAt": {
                "type": "string",
                "maxLength": 40
              }
            },
            "required": [
              "url",
              "token"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "runId"
        ],
        "additionalProperties": false
      },
      "CloudRunCreateInput": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "rootId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "workspace": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "provider": {
            "type": "string",
            "enum": [
              "github-copilot",
              "cursor",
              "claude-code",
              "codex",
              "jules",
              "devin",
              "ci"
            ]
          },
          "team": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "member": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "task": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "tools": {
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          "expiresAt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "startedBy": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "provider",
          "team",
          "member",
          "task",
          "tools",
          "expiresAt"
        ]
      },
      "CloudRunEndInput": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "maxLength": 200
          }
        }
      },
      "CloudRunEventsPostInput": {
        "type": "object",
        "properties": {
          "events": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "at": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "started",
                    "progress",
                    "waiting",
                    "handed-back",
                    "steered",
                    "cancelled",
                    "failed",
                    "integrated",
                    "closed"
                  ]
                },
                "providerTaskId": {
                  "type": "string",
                  "maxLength": 300
                },
                "url": {
                  "type": "string",
                  "maxLength": 2000
                },
                "pullRequest": {
                  "type": "string",
                  "maxLength": 2000
                },
                "note": {
                  "type": "string",
                  "maxLength": 500
                }
              },
              "required": [
                "at",
                "kind"
              ]
            }
          }
        },
        "required": [
          "events"
        ]
      },
      "CloudTokenRequestInput": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "grant_type": {
                "type": "string",
                "const": "authorization_code"
              },
              "code": {
                "type": "string",
                "minLength": 1
              },
              "code_verifier": {
                "type": "string",
                "minLength": 43,
                "maxLength": 128
              },
              "redirect_uri": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "grant_type",
              "code",
              "code_verifier",
              "redirect_uri"
            ]
          },
          {
            "type": "object",
            "properties": {
              "grant_type": {
                "type": "string",
                "const": "refresh_token"
              },
              "refresh_token": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "grant_type",
              "refresh_token"
            ]
          }
        ]
      },
      "CloudTokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          },
          "refresh_token": {
            "type": "string"
          },
          "expires_in": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "token_type": {
            "type": "string",
            "const": "Bearer"
          }
        },
        "required": [
          "access_token",
          "refresh_token",
          "expires_in",
          "token_type"
        ],
        "additionalProperties": false
      },
      "CreatedInvitation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          },
          "invitedBy": {
            "type": "string"
          },
          "invitedByName": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string"
          },
          "link": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "email",
          "role",
          "invitedBy",
          "createdAt",
          "expiresAt",
          "link"
        ],
        "additionalProperties": false
      },
      "CreateInvitationInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "role": {
            "default": "member",
            "type": "string",
            "enum": [
              "admin",
              "member",
              "viewer"
            ]
          }
        },
        "required": [
          "email"
        ]
      },
      "CreateOrganisationInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "turnstileToken": {
            "type": "string",
            "maxLength": 2048
          }
        },
        "required": [
          "name"
        ]
      },
      "DeleteAccountInput": {
        "type": "object",
        "properties": {
          "confirm": {
            "type": "string",
            "minLength": 1,
            "maxLength": 254
          }
        },
        "required": [
          "confirm"
        ]
      },
      "DesignSystemReviewSubmitInput": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "html": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2097152
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          },
          "checked": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            }
          },
          "findings": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rule": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                },
                "note": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 2000
                },
                "where": {
                  "type": "string",
                  "maxLength": 300
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "must",
                    "should",
                    "note"
                  ]
                }
              },
              "required": [
                "rule",
                "note"
              ]
            }
          },
          "summary": {
            "type": "string",
            "maxLength": 2000
          },
          "agent": {
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "findings"
        ]
      },
      "DesktopSignInRequestInput": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "idToken": {
                "type": "string",
                "minLength": 1,
                "maxLength": 16384
              }
            },
            "required": [
              "idToken"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "sessionToken": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1024
              }
            },
            "required": [
              "sessionToken"
            ],
            "additionalProperties": false
          }
        ]
      },
      "DesktopSignInState": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "signedIn": {
                "type": "boolean",
                "const": false
              }
            },
            "required": [
              "signedIn"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "signedIn": {
                "type": "boolean",
                "const": true
              },
              "signedInAt": {
                "type": "string"
              },
              "freshness": {
                "type": "string",
                "enum": [
                  "signed_in",
                  "token_issued"
                ]
              },
              "verifiedAt": {
                "type": "string"
              },
              "validUntil": {
                "type": "string"
              },
              "stepUpUntil": {
                "type": "string"
              },
              "recent": {
                "type": "boolean"
              },
              "attachUntil": {
                "type": "string"
              },
              "stepUpMinutes": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "signedIn",
              "signedInAt",
              "freshness",
              "verifiedAt",
              "validUntil",
              "stepUpUntil",
              "recent",
              "stepUpMinutes"
            ],
            "additionalProperties": false
          }
        ]
      },
      "DeviceCode": {
        "type": "object",
        "properties": {
          "device_code": {
            "type": "string"
          },
          "user_code": {
            "type": "string"
          },
          "verification_uri": {
            "type": "string",
            "format": "uri"
          },
          "verification_uri_complete": {
            "type": "string",
            "format": "uri"
          },
          "interval": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "expires_in": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "device_code",
          "user_code",
          "verification_uri"
        ],
        "additionalProperties": false
      },
      "DeviceCodeRequestInput": {
        "type": "object",
        "properties": {
          "workspaceId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "deviceId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "kind": {
            "type": "string",
            "enum": [
              "desktop",
              "node"
            ]
          },
          "tags": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "manifest": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "nodeId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "kind": {
                "type": "string",
                "const": "node"
              },
              "roles": {
                "default": [
                  "teams"
                ],
                "maxItems": 5,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "teams",
                    "inference",
                    "dlp",
                    "sandbox",
                    "computer"
                  ]
                }
              },
              "owner": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "user",
                      "org",
                      "project"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "tags": {
                    "default": [],
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  }
                },
                "required": [
                  "type"
                ]
              },
              "runtimes": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "version": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "authenticated": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id"
                  ]
                }
              },
              "models": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "contextLength": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 10000000
                    },
                    "acceleration": {
                      "type": "string",
                      "enum": [
                        "cpu",
                        "gpu"
                      ]
                    },
                    "service": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  },
                  "required": [
                    "id"
                  ]
                }
              },
              "memory": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "obsidian",
                        "graphify"
                      ]
                    },
                    "scopes": {
                      "minItems": 1,
                      "maxItems": 2,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "repo",
                          "knowledge"
                        ]
                      }
                    },
                    "root": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "id",
                    "kind",
                    "scopes"
                  ]
                }
              },
              "repos": {
                "default": [],
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "rootId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "remote": {
                      "type": "string",
                      "maxLength": 500
                    },
                    "branch": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "rootId"
                  ]
                }
              },
              "resources": {
                "default": {},
                "type": "object",
                "properties": {
                  "cpu": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 100000
                  },
                  "ramGb": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1000000
                  },
                  "gpus": {
                    "default": [],
                    "maxItems": 16,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "vramGb": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100000
                        }
                      },
                      "required": [
                        "name"
                      ]
                    }
                  }
                }
              },
              "services": {
                "default": {},
                "type": "object",
                "properties": {
                  "control": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "model": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "memory": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "dlp": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "sandbox": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "computer": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  }
                }
              },
              "policy": {
                "default": {},
                "type": "object",
                "properties": {
                  "acceptsDispatchFrom": {
                    "default": [],
                    "maxItems": 64,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "maxConcurrentAgents": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  }
                }
              },
              "sandbox": {
                "type": "object",
                "properties": {
                  "engine": {
                    "type": "string",
                    "enum": [
                      "docker",
                      "podman",
                      "kubernetes"
                    ]
                  },
                  "images": {
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 300
                    }
                  },
                  "maxConcurrent": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  },
                  "egress": {
                    "type": "string",
                    "enum": [
                      "policy",
                      "none"
                    ]
                  }
                },
                "required": [
                  "engine",
                  "images"
                ]
              },
              "computer": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "browser",
                      "desktop"
                    ]
                  },
                  "display": {
                    "type": "string",
                    "enum": [
                      "headless",
                      "xvfb",
                      "vnc",
                      "native"
                    ]
                  },
                  "sessions": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  }
                },
                "required": [
                  "kind"
                ]
              },
              "home": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1000
              },
              "sandboxCheck": {
                "type": "object",
                "properties": {
                  "canSandbox": {
                    "type": "boolean"
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "kernel": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "landlockAbi": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1000
                  },
                  "openshell": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "docker": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "canSandbox",
                  "kernel"
                ]
              }
            },
            "required": [
              "schemaVersion",
              "nodeId",
              "name",
              "kind",
              "owner"
            ]
          },
          "dpop_jkt": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{43}$"
          }
        },
        "required": [
          "workspaceId",
          "name"
        ]
      },
      "DeviceOrderBatch": {
        "type": "object",
        "properties": {
          "batchId": {
            "type": "string"
          },
          "orders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "deviceId": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "model.download",
                    "model.remove",
                    "runtime.install",
                    "runtime.remove",
                    "dlp.configure",
                    "setting.set",
                    "skill.evaluate",
                    "runner.configure",
                    "specialist.evaluate",
                    "toolserver.verify",
                    "foundry.publish",
                    "foundry.unpublish",
                    "teams.refresh",
                    "routine.trigger",
                    "workflow.start",
                    "service.configure",
                    "update.configure",
                    "routine.run",
                    "routine.remove",
                    "remote.configure",
                    "node.setting.set"
                  ]
                },
                "body": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                },
                "issuedAt": {
                  "type": "string"
                },
                "issuedBy": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                },
                "projectId": {
                  "type": "string"
                },
                "batchId": {
                  "type": "string"
                },
                "expiresAt": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "pending",
                    "done",
                    "failed",
                    "refused",
                    "expired"
                  ]
                },
                "message": {
                  "type": "string"
                },
                "answeredAt": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "deviceId",
                "kind",
                "body",
                "issuedAt",
                "issuedBy",
                "expiresAt",
                "state"
              ],
              "additionalProperties": false
            }
          },
          "skipped": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "deviceId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "error": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "deviceId",
                "name",
                "error",
                "message"
              ],
              "additionalProperties": false
            }
          },
          "summary": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "pending": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "done": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "refused": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "expired": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "pending",
              "done",
              "failed",
              "refused",
              "expired"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "orders",
          "summary"
        ],
        "additionalProperties": false
      },
      "DeviceOrderIssueInput": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "model.download",
              "model.remove",
              "runtime.install",
              "runtime.remove",
              "dlp.configure",
              "setting.set",
              "skill.evaluate",
              "runner.configure",
              "specialist.evaluate",
              "toolserver.verify",
              "foundry.publish",
              "foundry.unpublish",
              "teams.refresh",
              "routine.trigger",
              "workflow.start",
              "service.configure",
              "update.configure",
              "routine.run",
              "routine.remove",
              "remote.configure",
              "node.setting.set"
            ]
          },
          "body": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "kind",
          "body"
        ]
      },
      "DeviceOrderRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "deviceId": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "model.download",
              "model.remove",
              "runtime.install",
              "runtime.remove",
              "dlp.configure",
              "setting.set",
              "skill.evaluate",
              "runner.configure",
              "specialist.evaluate",
              "toolserver.verify",
              "foundry.publish",
              "foundry.unpublish",
              "teams.refresh",
              "routine.trigger",
              "workflow.start",
              "service.configure",
              "update.configure",
              "routine.run",
              "routine.remove",
              "remote.configure",
              "node.setting.set"
            ]
          },
          "body": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          },
          "issuedAt": {
            "type": "string"
          },
          "issuedBy": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "projectId": {
            "type": "string"
          },
          "batchId": {
            "type": "string"
          },
          "expiresAt": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "done",
              "failed",
              "refused",
              "expired"
            ]
          },
          "message": {
            "type": "string"
          },
          "answeredAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "deviceId",
          "kind",
          "body",
          "issuedAt",
          "issuedBy",
          "expiresAt",
          "state"
        ],
        "additionalProperties": false
      },
      "DeviceTokenRequestInput": {
        "type": "object",
        "properties": {
          "device_code": {
            "type": "string"
          }
        },
        "required": [
          "device_code"
        ]
      },
      "DirectoryPerson": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "email": {
            "type": "string",
            "maxLength": 320
          },
          "picture": {
            "type": "string",
            "maxLength": 2000,
            "format": "uri"
          },
          "onProject": {
            "type": "boolean"
          },
          "linked": {
            "type": "object",
            "properties": {
              "github": {
                "type": "object",
                "properties": {
                  "login": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "login"
                ],
                "additionalProperties": false
              },
              "azureDevOps": {
                "type": "object",
                "properties": {
                  "uniqueName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 320
                  },
                  "displayName": {
                    "type": "string",
                    "maxLength": 300
                  }
                },
                "required": [
                  "uniqueName"
                ],
                "additionalProperties": false
              },
              "jira": {
                "type": "object",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "displayName": {
                    "type": "string",
                    "maxLength": 300
                  }
                },
                "required": [
                  "accountId"
                ],
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      },
      "DiscoveryDocument": {
        "type": "object",
        "properties": {
          "version": {
            "type": "number",
            "const": 1
          },
          "tenant": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "organisation": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "apiUrl": {
            "type": "string",
            "format": "uri"
          },
          "relayUrl": {
            "type": "string",
            "format": "uri"
          },
          "meshUrl": {
            "type": "string",
            "format": "uri"
          },
          "signingKeysUrl": {
            "type": "string",
            "format": "uri"
          },
          "auth": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "oidc"
              },
              "issuer": {
                "type": "string",
                "format": "uri"
              },
              "clientId": {
                "type": "string",
                "minLength": 1
              },
              "apiScope": {
                "type": "string",
                "minLength": 1
              },
              "deviceAuthorizationEndpoint": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "kind",
              "issuer",
              "clientId",
              "apiScope"
            ],
            "additionalProperties": false
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ingest",
                "catalogue",
                "policy",
                "relay",
                "mesh",
                "remote-control"
              ]
            }
          },
          "dpopSigningAlgs": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ES256",
                "EdDSA"
              ]
            }
          },
          "edition": {
            "type": "string",
            "enum": [
              "enterprise",
              "cloud"
            ]
          },
          "releasesUrl": {
            "type": "string",
            "format": "uri"
          },
          "turnstileSiteKey": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "microsoftSignIn": {
            "type": "object",
            "properties": {
              "clientId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "tenantId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "authority": {
                "type": "string",
                "format": "starts_with",
                "pattern": "^https:\\/\\/.*"
              }
            },
            "required": [
              "clientId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "version",
          "tenant",
          "organisation",
          "apiUrl",
          "relayUrl",
          "auth",
          "capabilities"
        ],
        "additionalProperties": false
      },
      "EmailStartInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "client": {
            "type": "string",
            "enum": [
              "console",
              "mobile"
            ]
          },
          "redirect_uri": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "code_challenge": {
            "type": "string",
            "minLength": 43,
            "maxLength": 128
          },
          "code_challenge_method": {
            "default": "S256",
            "type": "string",
            "const": "S256"
          },
          "state": {
            "type": "string",
            "maxLength": 500
          },
          "link": {
            "type": "string",
            "maxLength": 300
          },
          "confirm": {
            "type": "string",
            "maxLength": 300
          },
          "turnstileToken": {
            "type": "string",
            "maxLength": 2048
          }
        },
        "required": [
          "email",
          "client",
          "redirect_uri",
          "code_challenge"
        ]
      },
      "EmailVerifyInput": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "format": "email",
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "code": {
            "type": "string",
            "pattern": "^\\d{6}$"
          },
          "state": {
            "type": "string",
            "maxLength": 500
          }
        },
        "required": [
          "email",
          "code"
        ]
      },
      "EmailVerifyResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      },
      "IngestResponse": {
        "type": "object",
        "properties": {
          "accepted": {
            "type": "object",
            "properties": {
              "events": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "usage": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "audit": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "tasks": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "events",
              "usage",
              "audit",
              "tasks"
            ],
            "additionalProperties": false
          },
          "cursors": {
            "type": "object",
            "properties": {
              "events": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "usage": {
                "type": "string"
              },
              "audit": {
                "type": "string"
              },
              "runs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "events"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "accepted",
          "cursors"
        ],
        "additionalProperties": false
      },
      "InvitationPreview": {
        "type": "object",
        "properties": {
          "organisation": {
            "type": "string"
          },
          "invitedBy": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          },
          "expiresAt": {
            "type": "string"
          }
        },
        "required": [
          "organisation",
          "email",
          "role",
          "expiresAt"
        ],
        "additionalProperties": false
      },
      "LinkTicket": {
        "type": "object",
        "properties": {
          "ticket": {
            "type": "string"
          },
          "expiresIn": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "ticket",
          "expiresIn"
        ],
        "additionalProperties": false
      },
      "NodeJoinInput": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 10,
            "maxLength": 200
          },
          "manifest": {
            "type": "object",
            "properties": {
              "schemaVersion": {
                "type": "number",
                "const": 1
              },
              "nodeId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "kind": {
                "type": "string",
                "const": "node"
              },
              "roles": {
                "default": [
                  "teams"
                ],
                "maxItems": 5,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "teams",
                    "inference",
                    "dlp",
                    "sandbox",
                    "computer"
                  ]
                }
              },
              "owner": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "user",
                      "org",
                      "project"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "tags": {
                    "default": [],
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  }
                },
                "required": [
                  "type"
                ]
              },
              "runtimes": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    "version": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "authenticated": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id"
                  ]
                }
              },
              "models": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "contextLength": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 10000000
                    },
                    "acceleration": {
                      "type": "string",
                      "enum": [
                        "cpu",
                        "gpu"
                      ]
                    },
                    "service": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  },
                  "required": [
                    "id"
                  ]
                }
              },
              "memory": {
                "default": [],
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "obsidian",
                        "graphify"
                      ]
                    },
                    "scopes": {
                      "minItems": 1,
                      "maxItems": 2,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "repo",
                          "knowledge"
                        ]
                      }
                    },
                    "root": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "id",
                    "kind",
                    "scopes"
                  ]
                }
              },
              "repos": {
                "default": [],
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "rootId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "remote": {
                      "type": "string",
                      "maxLength": 500
                    },
                    "branch": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "rootId"
                  ]
                }
              },
              "resources": {
                "default": {},
                "type": "object",
                "properties": {
                  "cpu": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 100000
                  },
                  "ramGb": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1000000
                  },
                  "gpus": {
                    "default": [],
                    "maxItems": 16,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "vramGb": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100000
                        }
                      },
                      "required": [
                        "name"
                      ]
                    }
                  }
                }
              },
              "services": {
                "default": {},
                "type": "object",
                "properties": {
                  "control": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "model": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "memory": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "dlp": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "sandbox": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  },
                  "computer": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 65535
                  }
                }
              },
              "policy": {
                "default": {},
                "type": "object",
                "properties": {
                  "acceptsDispatchFrom": {
                    "default": [],
                    "maxItems": 64,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "maxConcurrentAgents": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  }
                }
              },
              "sandbox": {
                "type": "object",
                "properties": {
                  "engine": {
                    "type": "string",
                    "enum": [
                      "docker",
                      "podman",
                      "kubernetes"
                    ]
                  },
                  "images": {
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 300
                    }
                  },
                  "maxConcurrent": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  },
                  "egress": {
                    "type": "string",
                    "enum": [
                      "policy",
                      "none"
                    ]
                  }
                },
                "required": [
                  "engine",
                  "images"
                ]
              },
              "computer": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "browser",
                      "desktop"
                    ]
                  },
                  "display": {
                    "type": "string",
                    "enum": [
                      "headless",
                      "xvfb",
                      "vnc",
                      "native"
                    ]
                  },
                  "sessions": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 1000
                  }
                },
                "required": [
                  "kind"
                ]
              },
              "home": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1000
              },
              "sandboxCheck": {
                "type": "object",
                "properties": {
                  "canSandbox": {
                    "type": "boolean"
                  },
                  "reason": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "kernel": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "landlockAbi": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1000
                  },
                  "openshell": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "docker": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "canSandbox",
                  "kernel"
                ]
              }
            },
            "required": [
              "schemaVersion",
              "nodeId",
              "name",
              "kind",
              "owner"
            ]
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "tags": {
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          }
        },
        "required": [
          "key",
          "manifest",
          "name"
        ]
      },
      "NotificationPreferences": {
        "type": "object",
        "properties": {
          "digest": {
            "default": {
              "cadence": "off",
              "hour": 8
            },
            "type": "object",
            "properties": {
              "cadence": {
                "type": "string",
                "enum": [
                  "off",
                  "hourly",
                  "daily"
                ]
              },
              "hour": {
                "default": 8,
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              }
            },
            "required": [
              "cadence",
              "hour"
            ],
            "additionalProperties": false
          },
          "quietHours": {
            "default": {
              "enabled": false,
              "start": "22:00",
              "end": "07:00"
            },
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "start": {
                "type": "string",
                "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
              },
              "end": {
                "type": "string",
                "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
              }
            },
            "required": [
              "enabled",
              "start",
              "end"
            ],
            "additionalProperties": false
          },
          "timeZone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          },
          "forYou": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "digest",
          "quietHours",
          "forYou"
        ],
        "additionalProperties": false
      },
      "NotificationPreferencesInput": {
        "type": "object",
        "properties": {
          "digest": {
            "default": {
              "cadence": "off",
              "hour": 8
            },
            "type": "object",
            "properties": {
              "cadence": {
                "type": "string",
                "enum": [
                  "off",
                  "hourly",
                  "daily"
                ]
              },
              "hour": {
                "default": 8,
                "type": "integer",
                "minimum": 0,
                "maximum": 23
              }
            },
            "required": [
              "cadence"
            ]
          },
          "quietHours": {
            "default": {
              "enabled": false,
              "start": "22:00",
              "end": "07:00"
            },
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "start": {
                "type": "string",
                "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
              },
              "end": {
                "type": "string",
                "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
              }
            },
            "required": [
              "enabled",
              "start",
              "end"
            ]
          },
          "timeZone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64
          },
          "forYou": {
            "default": false,
            "type": "boolean"
          }
        }
      },
      "OrganisationSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "personal",
              "team"
            ]
          },
          "plan": {
            "type": "string",
            "enum": [
              "free",
              "teams"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "plan",
          "role"
        ],
        "additionalProperties": false
      },
      "PartRequestInput": {
        "type": "object",
        "properties": {
          "projectTask": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "rootId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "pattern": "^[A-Za-z0-9_.:-]+$"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "description": {
            "default": "",
            "type": "string",
            "maxLength": 200000
          },
          "ref": {
            "type": "string",
            "maxLength": 200
          },
          "team": {
            "type": "string",
            "maxLength": 200
          },
          "specialist": {
            "type": "string",
            "maxLength": 200
          },
          "role": {
            "type": "string",
            "maxLength": 200
          },
          "originTeam": {
            "type": "string",
            "maxLength": 200
          },
          "assignee": {
            "type": "string",
            "maxLength": 200
          },
          "plan": {
            "type": "object",
            "properties": {
              "rootId": {
                "type": "string",
                "maxLength": 200
              },
              "planId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "ref": {
                "type": "string",
                "maxLength": 100
              }
            },
            "required": [
              "rootId",
              "planId",
              "ref"
            ]
          },
          "waitsOnParts": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ref": {
                  "type": "string",
                  "maxLength": 200
                },
                "rootId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200,
                  "pattern": "^[A-Za-z0-9_.:-]+$"
                },
                "board": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200,
                  "pattern": "^[A-Za-z0-9_.:-]+$"
                },
                "uid": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "name": {
                  "type": "string",
                  "maxLength": 200
                },
                "title": {
                  "type": "string",
                  "maxLength": 200
                }
              },
              "required": [
                "ref",
                "rootId",
                "board",
                "uid"
              ]
            }
          },
          "waitsOn": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ref": {
                  "type": "string",
                  "maxLength": 200
                },
                "rootId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200,
                  "pattern": "^[A-Za-z0-9_.:-]+$"
                },
                "board": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200,
                  "pattern": "^[A-Za-z0-9_.:-]+$"
                },
                "uid": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                },
                "name": {
                  "type": "string",
                  "maxLength": 200
                },
                "title": {
                  "type": "string",
                  "maxLength": 200
                }
              },
              "required": [
                "ref",
                "rootId",
                "board",
                "uid"
              ]
            }
          },
          "metadata": {
            "type": "object",
            "properties": {
              "uid": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              }
            },
            "required": [
              "uid"
            ],
            "additionalProperties": {}
          },
          "branch": {
            "type": "string",
            "maxLength": 250
          }
        },
        "required": [
          "projectTask",
          "rootId",
          "title"
        ]
      },
      "PeopleMe": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "maxLength": 300
          },
          "email": {
            "type": "string",
            "maxLength": 320
          },
          "picture": {
            "type": "string"
          },
          "profileUrl": {
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "PlatformEnvelopeInput": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "number",
            "const": 1
          },
          "projectId": {
            "type": "string"
          },
          "workspaceId": {
            "type": "string"
          },
          "sentAt": {
            "type": "string"
          },
          "cursors": {
            "type": "object",
            "properties": {
              "events": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "usage": {
                "type": "string"
              },
              "audit": {
                "type": "string"
              },
              "runs": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "events"
            ]
          },
          "events": {
            "default": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "seq": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "at": {
                  "type": "number"
                },
                "kind": {
                  "type": "string"
                },
                "payload": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "required": [
                "seq",
                "at",
                "kind",
                "payload"
              ]
            }
          },
          "usage": {
            "default": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "at": {
                  "type": "string"
                },
                "agentKey": {
                  "type": "string"
                },
                "provider": {
                  "type": "string"
                },
                "model": {
                  "type": "string"
                },
                "promptTokens": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "completionTokens": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "exactUsage": {
                  "type": "boolean"
                },
                "costUsd": {
                  "type": "number",
                  "minimum": 0
                },
                "latencyMs": {
                  "type": "number",
                  "minimum": 0
                },
                "toolCalls": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "ok",
                    "error",
                    "cancelled"
                  ]
                },
                "repairs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "principal": {
                  "type": "string",
                  "maxLength": 200
                },
                "actor": {
                  "type": "string",
                  "maxLength": 200
                },
                "rootId": {
                  "type": "string",
                  "maxLength": 200
                },
                "teamId": {
                  "type": "string",
                  "maxLength": 200
                },
                "taskId": {
                  "type": "string",
                  "maxLength": 100
                },
                "id": {
                  "type": "string",
                  "minLength": 8,
                  "maxLength": 64
                },
                "runtime": {
                  "type": "string",
                  "maxLength": 60
                },
                "billing": {
                  "type": "string",
                  "enum": [
                    "metered",
                    "subscription",
                    "local",
                    "azure"
                  ]
                },
                "azureSource": {
                  "type": "string",
                  "maxLength": 300
                },
                "cluster": {
                  "type": "string",
                  "maxLength": 200
                },
                "estimated": {
                  "type": "boolean"
                },
                "priced": {
                  "type": "string",
                  "enum": [
                    "provider",
                    "list",
                    "none",
                    "platform"
                  ]
                },
                "reportedUsd": {
                  "type": "number",
                  "minimum": 0
                },
                "cacheReadTokens": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "cacheWriteTokens": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "images": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "premiumRequests": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "aiCredits": {
                  "type": "number",
                  "minimum": 0
                },
                "sessionId": {
                  "type": "string",
                  "maxLength": 200
                },
                "memberId": {
                  "type": "string",
                  "maxLength": 300
                },
                "memberKind": {
                  "type": "string",
                  "enum": [
                    "specialist",
                    "member"
                  ]
                },
                "runId": {
                  "type": "string",
                  "maxLength": 200
                },
                "workflowRunId": {
                  "type": "string",
                  "maxLength": 100
                },
                "stepId": {
                  "type": "string",
                  "maxLength": 60
                }
              },
              "required": [
                "at",
                "provider",
                "model",
                "promptTokens",
                "completionTokens",
                "exactUsage",
                "latencyMs",
                "toolCalls",
                "status"
              ]
            }
          },
          "audit": {
            "default": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ts": {
                  "type": "string"
                },
                "actor": {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "enum": [
                        "user",
                        "remote",
                        "agent",
                        "system",
                        "schedule"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "sessionId": {
                      "type": "string"
                    },
                    "teamId": {
                      "type": "string"
                    },
                    "agentName": {
                      "type": "string"
                    },
                    "taskId": {
                      "type": "string"
                    },
                    "principal": {
                      "type": "string"
                    },
                    "entraAgentId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "kind"
                  ]
                },
                "action": {
                  "type": "string"
                },
                "target": {
                  "type": "string"
                },
                "teamId": {
                  "type": "string"
                },
                "sessionId": {
                  "type": "string"
                },
                "runId": {
                  "type": "string",
                  "maxLength": 200
                },
                "taskId": {
                  "type": "string"
                },
                "detail": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                },
                "outcome": {
                  "type": "string",
                  "enum": [
                    "ok",
                    "denied",
                    "error"
                  ]
                },
                "error": {
                  "type": "string"
                },
                "prev": {
                  "type": "string"
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "warn",
                    "high"
                  ]
                }
              },
              "required": [
                "ts",
                "actor",
                "action",
                "outcome"
              ]
            }
          },
          "tasks": {
            "default": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "uid": {
                  "type": "string"
                },
                "teamId": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "priority": {
                  "type": "string"
                },
                "assignee": {
                  "type": "string"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "createdAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "outcome": {
                  "type": "string"
                },
                "principal": {
                  "type": "string",
                  "maxLength": 200
                },
                "actor": {
                  "type": "string",
                  "maxLength": 200
                }
              },
              "required": [
                "id",
                "teamId",
                "title",
                "status",
                "priority",
                "labels",
                "createdAt",
                "updatedAt"
              ]
            }
          },
          "runs": {
            "default": [],
            "maxItems": 200,
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "seq": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "at": {
                      "type": "string"
                    },
                    "runId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "sessionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "agent": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "teamId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "specialistId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "entraAgentId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "role": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "principal": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "taskId": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "channel": {
                      "type": "string",
                      "enum": [
                        "workbench",
                        "node",
                        "routine"
                      ]
                    },
                    "content": {
                      "type": "string",
                      "enum": [
                        "none",
                        "redacted",
                        "full"
                      ]
                    },
                    "memberId": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "memberKind": {
                      "type": "string",
                      "enum": [
                        "specialist",
                        "member"
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "const": "run.start"
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "executionType": {
                      "type": "string",
                      "enum": [
                        "HumanToAgent",
                        "Agent2Agent"
                      ]
                    },
                    "caller": {
                      "type": "object",
                      "properties": {
                        "agent": {
                          "type": "string",
                          "maxLength": 200
                        },
                        "entraAgentId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "sessionId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "agent"
                      ]
                    },
                    "trigger": {
                      "type": "string",
                      "maxLength": 40
                    },
                    "routine": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "name": {
                          "type": "string",
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "id"
                      ]
                    },
                    "runtime": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "model": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "planId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "conversationId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "input": {
                      "type": "string",
                      "maxLength": 32000
                    },
                    "withheld": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "foundry": {
                      "type": "object",
                      "properties": {
                        "projectEndpoint": {
                          "type": "string",
                          "maxLength": 500
                        },
                        "agentName": {
                          "type": "string",
                          "maxLength": 200
                        },
                        "agentVersion": {
                          "type": "string",
                          "maxLength": 100
                        },
                        "conversationId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "responseIds": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "apiVersion": {
                          "type": "string",
                          "maxLength": 40
                        }
                      },
                      "required": [
                        "projectEndpoint"
                      ]
                    },
                    "contextProfile": {
                      "type": "string",
                      "enum": [
                        "lean",
                        "standard",
                        "full"
                      ]
                    }
                  },
                  "required": [
                    "seq",
                    "at",
                    "runId",
                    "sessionId",
                    "agent",
                    "teamId",
                    "channel",
                    "content",
                    "kind",
                    "startedAt",
                    "executionType",
                    "trigger"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "seq": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "at": {
                      "type": "string"
                    },
                    "runId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "sessionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "agent": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "teamId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "specialistId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "entraAgentId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "role": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "principal": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "taskId": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "channel": {
                      "type": "string",
                      "enum": [
                        "workbench",
                        "node",
                        "routine"
                      ]
                    },
                    "content": {
                      "type": "string",
                      "enum": [
                        "none",
                        "redacted",
                        "full"
                      ]
                    },
                    "memberId": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "memberKind": {
                      "type": "string",
                      "enum": [
                        "specialist",
                        "member"
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "const": "run.tool"
                    },
                    "toolCallId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "toolName": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 300
                    },
                    "toolType": {
                      "type": "string",
                      "enum": [
                        "mcp",
                        "builtin"
                      ]
                    },
                    "server": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "toolKind": {
                      "type": "string",
                      "maxLength": 40
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "endedAt": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "completed",
                        "failed",
                        "cancelled",
                        "pending"
                      ]
                    },
                    "argumentsDigest": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "arguments": {
                      "type": "string",
                      "maxLength": 32000
                    },
                    "gate": {
                      "type": "object",
                      "properties": {
                        "decision": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "by": {
                          "type": "string",
                          "maxLength": 100
                        },
                        "risk": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "enforced": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "decision"
                      ]
                    },
                    "approval": {
                      "type": "object",
                      "properties": {
                        "decision": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "actor": {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "maxLength": 20
                            },
                            "id": {
                              "type": "string",
                              "maxLength": 200
                            },
                            "principal": {
                              "type": "string",
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind"
                          ]
                        }
                      },
                      "required": [
                        "decision",
                        "actor"
                      ]
                    },
                    "withheld": {
                      "type": "string",
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "seq",
                    "at",
                    "runId",
                    "sessionId",
                    "agent",
                    "teamId",
                    "channel",
                    "content",
                    "kind",
                    "toolCallId",
                    "toolName",
                    "toolType",
                    "startedAt",
                    "status"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "seq": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "at": {
                      "type": "string"
                    },
                    "runId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "sessionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "agent": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "teamId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "specialistId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "entraAgentId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "role": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "principal": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "taskId": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "channel": {
                      "type": "string",
                      "enum": [
                        "workbench",
                        "node",
                        "routine"
                      ]
                    },
                    "content": {
                      "type": "string",
                      "enum": [
                        "none",
                        "redacted",
                        "full"
                      ]
                    },
                    "memberId": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "memberKind": {
                      "type": "string",
                      "enum": [
                        "specialist",
                        "member"
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "const": "run.chat"
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "durationMs": {
                      "type": "number",
                      "minimum": 0
                    },
                    "provider": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "model": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "inputTokens": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "outputTokens": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "ok",
                        "error",
                        "cancelled"
                      ]
                    },
                    "stream": {
                      "type": "boolean"
                    },
                    "toolCalls": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "costUsd": {
                      "type": "number",
                      "minimum": 0
                    },
                    "dlpAction": {
                      "type": "string",
                      "maxLength": 20
                    },
                    "dlpReason": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "blocked": {
                      "type": "boolean"
                    },
                    "error": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "foundry": {
                      "type": "object",
                      "properties": {
                        "responseId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        }
                      },
                      "required": [
                        "responseId"
                      ]
                    }
                  },
                  "required": [
                    "seq",
                    "at",
                    "runId",
                    "sessionId",
                    "agent",
                    "teamId",
                    "channel",
                    "content",
                    "kind",
                    "startedAt",
                    "durationMs",
                    "provider",
                    "model",
                    "inputTokens",
                    "outputTokens",
                    "status"
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "seq": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "at": {
                      "type": "string"
                    },
                    "runId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "sessionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "agent": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "teamId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "specialistId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "entraAgentId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "role": {
                      "type": "string",
                      "maxLength": 100
                    },
                    "principal": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "taskId": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "channel": {
                      "type": "string",
                      "enum": [
                        "workbench",
                        "node",
                        "routine"
                      ]
                    },
                    "content": {
                      "type": "string",
                      "enum": [
                        "none",
                        "redacted",
                        "full"
                      ]
                    },
                    "memberId": {
                      "type": "string",
                      "maxLength": 300
                    },
                    "memberKind": {
                      "type": "string",
                      "enum": [
                        "specialist",
                        "member"
                      ]
                    },
                    "kind": {
                      "type": "string",
                      "const": "run.end"
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "endedAt": {
                      "type": "string"
                    },
                    "outcome": {
                      "type": "string",
                      "enum": [
                        "ok",
                        "error",
                        "cancelled"
                      ]
                    },
                    "tokens": {
                      "type": "object",
                      "properties": {
                        "input": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "output": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "input",
                        "output"
                      ]
                    },
                    "toolCalls": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "costUsd": {
                      "type": "number",
                      "minimum": 0
                    },
                    "output": {
                      "type": "string",
                      "maxLength": 32000
                    },
                    "withheld": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "foundry": {
                      "type": "object",
                      "properties": {
                        "projectEndpoint": {
                          "type": "string",
                          "maxLength": 500
                        },
                        "agentName": {
                          "type": "string",
                          "maxLength": 200
                        },
                        "agentVersion": {
                          "type": "string",
                          "maxLength": 100
                        },
                        "conversationId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "responseIds": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "apiVersion": {
                          "type": "string",
                          "maxLength": 40
                        }
                      },
                      "required": [
                        "projectEndpoint"
                      ]
                    },
                    "compactions": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "overflowed": {
                      "type": "boolean",
                      "const": true
                    },
                    "fallbackTo": {
                      "type": "object",
                      "properties": {
                        "provider": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "model": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "reason": {
                          "type": "string",
                          "enum": [
                            "rate-limited",
                            "overloaded",
                            "dropped",
                            "refused"
                          ]
                        }
                      },
                      "required": [
                        "provider",
                        "model",
                        "reason"
                      ]
                    },
                    "durationMs": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "handedBack": {
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "seq",
                    "at",
                    "runId",
                    "sessionId",
                    "agent",
                    "teamId",
                    "channel",
                    "content",
                    "kind",
                    "startedAt",
                    "endedAt",
                    "outcome"
                  ]
                }
              ]
            }
          }
        },
        "required": [
          "schemaVersion",
          "projectId",
          "workspaceId",
          "sentAt",
          "cursors"
        ]
      },
      "PlatformOrganisation": {
        "type": "object",
        "properties": {
          "edition": {
            "type": "string",
            "enum": [
              "enterprise",
              "cloud"
            ]
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "enterprise",
              "personal",
              "team"
            ]
          },
          "plan": {
            "type": "string",
            "enum": [
              "free",
              "teams"
            ]
          }
        },
        "required": [
          "edition",
          "id",
          "name",
          "kind"
        ],
        "additionalProperties": false
      },
      "PolicyResponse": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "string"
          },
          "policy": {
            "type": "object",
            "properties": {
              "version": {
                "default": 1,
                "type": "number",
                "const": 1
              },
              "source": {
                "type": "string"
              },
              "allowedRuntimes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "allowedProviders": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "inference": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "dlp": {
                "type": "object",
                "properties": {
                  "classify": {
                    "default": false,
                    "type": "boolean"
                  },
                  "labels": {
                    "type": "object",
                    "properties": {
                      "taxonomy": {
                        "default": [],
                        "maxItems": 1000,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 64
                            },
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "sensitivity": {
                              "type": "string",
                              "enum": [
                                "public",
                                "internal",
                                "confidential",
                                "restricted"
                              ]
                            },
                            "parentId": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "hasProtection": {
                              "type": "boolean"
                            },
                            "markings": {
                              "maxItems": 20,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 6,
                                "maxLength": 500
                              }
                            },
                            "tenantId": {
                              "type": "string",
                              "maxLength": 64
                            }
                          },
                          "required": [
                            "id",
                            "name",
                            "sensitivity"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "routes": {
                        "type": "object",
                        "propertyNames": {
                          "type": "string",
                          "enum": [
                            "public",
                            "internal",
                            "confidential",
                            "restricted"
                          ]
                        },
                        "additionalProperties": {
                          "maxItems": 3,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "local",
                              "organisation",
                              "hosted"
                            ]
                          }
                        }
                      },
                      "unknownLabel": {
                        "type": "string",
                        "enum": [
                          "public",
                          "internal",
                          "confidential",
                          "restricted"
                        ]
                      },
                      "tenantId": {
                        "type": "string",
                        "maxLength": 64
                      },
                      "foreignTenant": {
                        "type": "string",
                        "enum": [
                          "public",
                          "internal",
                          "confidential",
                          "restricted"
                        ]
                      },
                      "organisationProviders": {
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        }
                      },
                      "fetchedAt": {
                        "type": "string",
                        "maxLength": 40
                      },
                      "hostedAction": {
                        "type": "object",
                        "propertyNames": {
                          "type": "string",
                          "enum": [
                            "public",
                            "internal",
                            "confidential",
                            "restricted"
                          ]
                        },
                        "additionalProperties": {
                          "type": "string",
                          "enum": [
                            "report",
                            "block",
                            "redact"
                          ]
                        }
                      },
                      "rules": {
                        "maxItems": 200,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "match": {
                              "type": "string",
                              "maxLength": 250
                            },
                            "action": {
                              "type": "string",
                              "enum": [
                                "allow",
                                "ask",
                                "block"
                              ]
                            },
                            "routes": {
                              "minItems": 1,
                              "maxItems": 3,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "local",
                                  "organisation",
                                  "hosted"
                                ]
                              }
                            }
                          },
                          "required": [
                            "match",
                            "action"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "taxonomy"
                    ],
                    "additionalProperties": false
                  },
                  "purview": {
                    "type": "object",
                    "properties": {
                      "evaluate": {
                        "default": "off",
                        "type": "string",
                        "enum": [
                          "off",
                          "prompts",
                          "all"
                        ]
                      },
                      "classifier": {
                        "default": "also",
                        "type": "string",
                        "enum": [
                          "also",
                          "instead"
                        ]
                      },
                      "failClosed": {
                        "default": false,
                        "type": "boolean"
                      },
                      "budgetMs": {
                        "default": 4000,
                        "type": "integer",
                        "minimum": 250,
                        "maximum": 30000
                      }
                    },
                    "required": [
                      "evaluate",
                      "classifier",
                      "failClosed",
                      "budgetMs"
                    ],
                    "additionalProperties": false
                  },
                  "classifier": {
                    "type": "object",
                    "properties": {
                      "provider": {
                        "default": "ollama",
                        "type": "string"
                      },
                      "model": {
                        "type": "string"
                      },
                      "endpoint": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      },
                      "tags": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "provider"
                    ],
                    "additionalProperties": false
                  },
                  "onSecrets": {
                    "default": "redact",
                    "type": "string",
                    "enum": [
                      "allow",
                      "redact",
                      "block",
                      "ask"
                    ]
                  },
                  "onPii": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "redact",
                      "block",
                      "ask"
                    ]
                  },
                  "onPromptInjection": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "block",
                      "ask"
                    ]
                  },
                  "blockSensitivity": {
                    "default": [
                      "restricted"
                    ],
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "public",
                        "internal",
                        "confidential",
                        "restricted"
                      ]
                    }
                  },
                  "onUnclassified": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "ask",
                      "block"
                    ]
                  },
                  "latencyBudgetMs": {
                    "default": 300,
                    "type": "integer",
                    "minimum": 50,
                    "maximum": 5000
                  }
                },
                "required": [
                  "classify",
                  "classifier",
                  "onSecrets",
                  "onPii",
                  "onPromptInjection",
                  "blockSensitivity",
                  "onUnclassified",
                  "latencyBudgetMs"
                ],
                "additionalProperties": false
              },
              "approvals": {
                "type": "object",
                "properties": {
                  "remoteApprovals": {
                    "type": "object",
                    "properties": {
                      "low": {
                        "default": "allow",
                        "type": "string",
                        "enum": [
                          "allow",
                          "deny"
                        ]
                      },
                      "medium": {
                        "default": "allow",
                        "type": "string",
                        "enum": [
                          "allow",
                          "deny"
                        ]
                      },
                      "high": {
                        "default": "deny",
                        "type": "string",
                        "enum": [
                          "allow",
                          "deny"
                        ]
                      }
                    },
                    "required": [
                      "low",
                      "medium",
                      "high"
                    ],
                    "additionalProperties": false
                  },
                  "requireHumanReviewLabels": {
                    "default": [],
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "decisionApproval": {
                    "type": "string",
                    "enum": [
                      "none",
                      "wider",
                      "all"
                    ]
                  }
                },
                "required": [
                  "remoteApprovals",
                  "requireHumanReviewLabels"
                ],
                "additionalProperties": false
              },
              "remote": {
                "type": "object",
                "properties": {
                  "allowTransports": {
                    "default": [
                      "ipc",
                      "lan",
                      "relay"
                    ],
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "ipc",
                        "companion",
                        "lan",
                        "relay"
                      ]
                    }
                  },
                  "maxScopes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "idleTimeoutMinutes": {
                    "default": 60,
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1440
                  },
                  "requireTls": {
                    "type": "boolean"
                  },
                  "killSwitchLockedOn": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "allowTransports",
                  "idleTimeoutMinutes"
                ],
                "additionalProperties": false
              },
              "git": {
                "type": "object",
                "properties": {
                  "protectedBranches": {
                    "default": [],
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "requirePullRequest": {
                    "default": false,
                    "type": "boolean"
                  }
                },
                "required": [
                  "protectedBranches",
                  "requirePullRequest"
                ],
                "additionalProperties": false
              },
              "agents": {
                "type": "object",
                "properties": {
                  "sandbox": {
                    "default": "off",
                    "type": "string",
                    "enum": [
                      "off",
                      "preferred",
                      "required"
                    ]
                  }
                },
                "required": [
                  "sandbox"
                ],
                "additionalProperties": false
              },
              "network": {
                "type": "object",
                "properties": {
                  "allowHosts": {
                    "default": [],
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 253
                    }
                  },
                  "denyHosts": {
                    "default": [],
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 253
                    }
                  },
                  "defaultAction": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "deny"
                    ]
                  },
                  "enforcement": {
                    "default": "enforce",
                    "type": "string",
                    "enum": [
                      "audit",
                      "enforce"
                    ]
                  },
                  "rules": {
                    "default": [],
                    "maxItems": 200,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "endpoints": {
                          "minItems": 1,
                          "maxItems": 100,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "host": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 253
                              },
                              "ports": {
                                "maxItems": 50,
                                "type": "array",
                                "items": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 65535
                                }
                              },
                              "protocol": {
                                "default": "tcp",
                                "type": "string",
                                "enum": [
                                  "tcp",
                                  "rest",
                                  "websocket",
                                  "graphql",
                                  "mcp",
                                  "json-rpc"
                                ]
                              },
                              "allow": {
                                "maxItems": 100,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "method": {
                                      "type": "string",
                                      "maxLength": 10
                                    },
                                    "path": {
                                      "type": "string",
                                      "maxLength": 500
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "deny": {
                                "maxItems": 100,
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "method": {
                                      "type": "string",
                                      "maxLength": 10
                                    },
                                    "path": {
                                      "type": "string",
                                      "maxLength": 500
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "tools": {
                                "type": "object",
                                "properties": {
                                  "allow": {
                                    "maxItems": 500,
                                    "type": "array",
                                    "items": {
                                      "type": "string",
                                      "maxLength": 200
                                    }
                                  },
                                  "deny": {
                                    "maxItems": 500,
                                    "type": "array",
                                    "items": {
                                      "type": "string",
                                      "maxLength": 200
                                    }
                                  }
                                },
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "host",
                              "protocol"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "programs": {
                          "default": [],
                          "maxItems": 100,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 300
                          }
                        },
                        "enforcement": {
                          "type": "string",
                          "enum": [
                            "audit",
                            "enforce"
                          ]
                        }
                      },
                      "required": [
                        "name",
                        "endpoints",
                        "programs"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "allowHosts",
                  "denyHosts",
                  "defaultAction",
                  "enforcement",
                  "rules"
                ],
                "additionalProperties": false
              },
              "tools": {
                "type": "object",
                "properties": {
                  "enforcement": {
                    "default": "audit",
                    "type": "string",
                    "enum": [
                      "audit",
                      "enforce"
                    ]
                  },
                  "unlistedServers": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "ask",
                      "block"
                    ]
                  },
                  "defaults": {
                    "type": "object",
                    "properties": {
                      "reads": {
                        "default": "allow",
                        "type": "string",
                        "enum": [
                          "allow",
                          "ask",
                          "off"
                        ]
                      },
                      "changes": {
                        "default": "ask",
                        "type": "string",
                        "enum": [
                          "allow",
                          "ask",
                          "off"
                        ]
                      },
                      "destroys": {
                        "default": "off",
                        "type": "string",
                        "enum": [
                          "allow",
                          "ask",
                          "off"
                        ]
                      }
                    },
                    "required": [
                      "reads",
                      "changes",
                      "destroys"
                    ],
                    "additionalProperties": false
                  },
                  "rules": {
                    "default": [],
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "server": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "tools": {
                          "maxItems": 200,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "risk": {
                          "type": "string",
                          "enum": [
                            "reads",
                            "changes",
                            "destroys"
                          ]
                        },
                        "action": {
                          "type": "string",
                          "enum": [
                            "allow",
                            "ask",
                            "off"
                          ]
                        },
                        "roles": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100
                          }
                        },
                        "match": {
                          "anyOf": [
                            {
                              "type": "string",
                              "const": "outside"
                            },
                            {
                              "type": "string",
                              "maxLength": 250
                            }
                          ]
                        }
                      },
                      "required": [
                        "server",
                        "action"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "recordArguments": {
                    "default": "redacted",
                    "type": "string",
                    "enum": [
                      "none",
                      "redacted"
                    ]
                  },
                  "afterOutside": {
                    "default": "record",
                    "type": "string",
                    "enum": [
                      "off",
                      "record",
                      "ask"
                    ]
                  },
                  "servers": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "name": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        "fingerprint": {
                          "type": "string",
                          "pattern": "^[0-9a-f]{64}$"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "published",
                            "withdrawn"
                          ]
                        },
                        "tools": {
                          "default": {},
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "object",
                            "properties": {
                              "risk": {
                                "type": "string",
                                "enum": [
                                  "reads",
                                  "changes",
                                  "destroys"
                                ]
                              },
                              "riskLevel": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 5
                              },
                              "action": {
                                "type": "string",
                                "enum": [
                                  "allow",
                                  "ask",
                                  "off"
                                ]
                              },
                              "hash": {
                                "type": "string",
                                "pattern": "^[0-9a-f]{64}$"
                              },
                              "description": {
                                "type": "string",
                                "maxLength": 4000
                              },
                              "resultOrigin": {
                                "type": "string",
                                "enum": [
                                  "own",
                                  "repository",
                                  "outside"
                                ]
                              },
                              "readsPrivate": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "risk"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "fingerprint",
                        "status",
                        "tools"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "denyCommands": {
                    "default": [],
                    "maxItems": 200,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 300
                    }
                  }
                },
                "required": [
                  "enforcement",
                  "unlistedServers",
                  "defaults",
                  "rules",
                  "recordArguments",
                  "afterOutside",
                  "denyCommands"
                ],
                "additionalProperties": false
              },
              "secrets": {
                "type": "object",
                "properties": {
                  "agentEnvironment": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "deny"
                    ]
                  },
                  "machineEnvironment": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "deny"
                    ]
                  },
                  "personalSecrets": {
                    "default": "allow",
                    "type": "string",
                    "enum": [
                      "allow",
                      "deny"
                    ]
                  },
                  "personalOnNodes": {
                    "default": "deny",
                    "type": "string",
                    "enum": [
                      "allow",
                      "deny"
                    ]
                  },
                  "requireKeyStore": {
                    "default": false,
                    "type": "boolean"
                  },
                  "accountOwners": {
                    "type": "object",
                    "properties": {
                      "github": {
                        "maxItems": 200,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "pattern": "^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+\\/)?[A-Za-z0-9_][A-Za-z0-9_.-]{0,99}$"
                        }
                      },
                      "azureDevOps": {
                        "maxItems": 200,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "pattern": "^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+\\/)?[A-Za-z0-9_][A-Za-z0-9_.-]{0,99}$"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "agentEnvironment",
                  "machineEnvironment",
                  "personalSecrets",
                  "personalOnNodes",
                  "requireKeyStore"
                ],
                "additionalProperties": false
              },
              "teams": {
                "type": "object",
                "properties": {
                  "allowGranted": {
                    "default": true,
                    "type": "boolean"
                  },
                  "allowPersonal": {
                    "default": true,
                    "type": "boolean"
                  },
                  "granted": {
                    "default": [],
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  }
                },
                "required": [
                  "allowGranted",
                  "allowPersonal",
                  "granted"
                ],
                "additionalProperties": false
              },
              "pullRequests": {
                "type": "object",
                "properties": {
                  "requiredApprovals": {
                    "default": 1,
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10
                  },
                  "allowSelfMerge": {
                    "default": false,
                    "type": "boolean"
                  },
                  "mergeMethods": {
                    "default": [
                      "merge",
                      "squash",
                      "rebase"
                    ],
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "merge",
                        "squash",
                        "rebase"
                      ]
                    }
                  },
                  "requireChecks": {
                    "default": true,
                    "type": "boolean"
                  },
                  "agentsMayMerge": {
                    "default": false,
                    "type": "boolean"
                  }
                },
                "required": [
                  "requiredApprovals",
                  "allowSelfMerge",
                  "mergeMethods",
                  "requireChecks",
                  "agentsMayMerge"
                ],
                "additionalProperties": false
              },
              "cloudAgents": {
                "type": "object",
                "properties": {
                  "allowed": {
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "github-copilot",
                        "cursor",
                        "claude-code",
                        "codex",
                        "jules",
                        "devin",
                        "ci"
                      ]
                    }
                  },
                  "organisationKeys": {
                    "type": "boolean"
                  },
                  "requireHumanReview": {
                    "type": "boolean"
                  },
                  "maxConcurrent": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              },
              "media": {
                "type": "object",
                "properties": {
                  "imageGeneration": {
                    "type": "string",
                    "enum": [
                      "off",
                      "local-only",
                      "allowed"
                    ]
                  },
                  "providers": {
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "maxImagesPerDay": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000
                  },
                  "approval": {
                    "type": "string",
                    "enum": [
                      "auto",
                      "ask"
                    ]
                  }
                },
                "additionalProperties": false
              },
              "a2a": {
                "type": "object",
                "properties": {
                  "allowed": {
                    "type": "boolean"
                  },
                  "callers": {
                    "maxItems": 100,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "requireApproval": {
                    "type": "string",
                    "enum": [
                      "always",
                      "changes"
                    ]
                  }
                },
                "required": [
                  "allowed"
                ],
                "additionalProperties": false
              },
              "settings": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "settingsMode": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string",
                  "enum": [
                    "locked",
                    "default"
                  ]
                }
              },
              "microsoft365": {
                "type": "object",
                "properties": {
                  "telemetryContent": {
                    "default": "redacted",
                    "type": "string",
                    "enum": [
                      "none",
                      "redacted",
                      "full"
                    ]
                  },
                  "agentIdentity": {
                    "type": "object",
                    "properties": {
                      "mode": {
                        "default": "specialist",
                        "type": "string",
                        "enum": [
                          "specialist",
                          "specialist-per-project"
                        ]
                      }
                    },
                    "required": [
                      "mode"
                    ],
                    "additionalProperties": false
                  },
                  "directExport": {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "default": false,
                        "type": "boolean"
                      },
                      "maxChatSpansPerRun": {
                        "default": 200,
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10000
                      }
                    },
                    "required": [
                      "enabled",
                      "maxChatSpansPerRun"
                    ],
                    "additionalProperties": false
                  },
                  "protectedLabels": {
                    "type": "object",
                    "properties": {
                      "sharepoint": {
                        "default": false,
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "sharepoint"
                    ],
                    "additionalProperties": false
                  },
                  "sentinel": {
                    "type": "object",
                    "properties": {
                      "connected": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "connected"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "telemetryContent"
                ],
                "additionalProperties": false
              },
              "exceptions": {
                "maxItems": 200,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100,
                      "description": "The exception's id at the organisation."
                    },
                    "requestId": {
                      "description": "The request it answers.",
                      "type": "string",
                      "maxLength": 100
                    },
                    "projectId": {
                      "description": "The organisation's project it applies to; absent, the project the document is for.",
                      "type": "string",
                      "maxLength": 100
                    },
                    "subject": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "model",
                              "description": "What the exception allows: a model provider or one of its models."
                            },
                            "providerId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100,
                              "description": "The model provider (catalogue id) the exception allows."
                            },
                            "model": {
                              "description": "One model of that provider; absent, any of its models.",
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "kind",
                            "providerId"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "runtime",
                              "description": "What the exception allows: an agent runtime."
                            },
                            "runtime": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100,
                              "description": "The agent runtime the exception allows."
                            }
                          },
                          "required": [
                            "kind",
                            "runtime"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "tool-server",
                              "description": "What the exception allows: a tool server."
                            },
                            "server": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200,
                              "description": "The tool server's name, as the repository or person configured it."
                            },
                            "fingerprint": {
                              "type": "string",
                              "pattern": "^[0-9a-f]{64}$",
                              "description": "The server's fingerprint (SHA-256 of its definition): what the exception allows."
                            }
                          },
                          "required": [
                            "kind",
                            "server",
                            "fingerprint"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "const": "network",
                              "description": "What the exception allows: a network address."
                            },
                            "host": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 253,
                              "description": "The host agents may connect to (exact, or *.example.com)."
                            },
                            "port": {
                              "description": "One port; absent, any port.",
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 65535
                            }
                          },
                          "required": [
                            "kind",
                            "host"
                          ],
                          "additionalProperties": false
                        }
                      ],
                      "description": "What it allows: a model, a runtime, a tool server or a network address."
                    },
                    "until": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64,
                      "description": "When it ends (ISO 8601). The machine stops honouring it then, whatever the document says."
                    },
                    "grantedBy": {
                      "description": "Who approved it, in words.",
                      "type": "string",
                      "maxLength": 200
                    },
                    "why": {
                      "description": "Why it was asked for, as the person wrote it.",
                      "type": "string",
                      "maxLength": 2000
                    }
                  },
                  "required": [
                    "id",
                    "subject",
                    "until"
                  ],
                  "additionalProperties": false
                }
              },
              "overlay": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "enum": [
                      "user-risk",
                      "device-compliance",
                      "agent-risk"
                    ]
                  },
                  "level": {
                    "type": "string",
                    "enum": [
                      "low",
                      "medium",
                      "high"
                    ]
                  },
                  "setBy": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "principal": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "at": {
                    "type": "string",
                    "maxLength": 64
                  },
                  "untightened": {
                    "type": "object",
                    "properties": {
                      "approvals": {
                        "type": "object",
                        "properties": {
                          "remoteApprovals": {
                            "type": "object",
                            "properties": {
                              "low": {
                                "default": "allow",
                                "type": "string",
                                "enum": [
                                  "allow",
                                  "deny"
                                ]
                              },
                              "medium": {
                                "default": "allow",
                                "type": "string",
                                "enum": [
                                  "allow",
                                  "deny"
                                ]
                              },
                              "high": {
                                "default": "deny",
                                "type": "string",
                                "enum": [
                                  "allow",
                                  "deny"
                                ]
                              }
                            },
                            "required": [
                              "low",
                              "medium",
                              "high"
                            ],
                            "additionalProperties": false
                          },
                          "requireHumanReviewLabels": {
                            "default": [],
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "decisionApproval": {
                            "type": "string",
                            "enum": [
                              "none",
                              "wider",
                              "all"
                            ]
                          }
                        },
                        "required": [
                          "remoteApprovals",
                          "requireHumanReviewLabels"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "reason"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "version",
              "dlp",
              "approvals",
              "remote",
              "git"
            ],
            "additionalProperties": false
          },
          "published": {
            "type": "boolean"
          }
        },
        "required": [
          "revision",
          "policy"
        ],
        "additionalProperties": false
      },
      "ProjectPicturePutInput": {
        "type": "object",
        "properties": {
          "spec": {
            "type": "object",
            "properties": {
              "version": {
                "type": "number",
                "const": 1
              },
              "kind": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9-]{0,39}$"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "required": [
                  "title"
                ],
                "additionalProperties": {}
              }
            },
            "required": [
              "version",
              "kind",
              "meta"
            ],
            "additionalProperties": {}
          },
          "svg": {
            "type": "string",
            "minLength": 1
          },
          "look": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9-]{0,39}$"
          },
          "edited": {
            "type": "boolean"
          }
        },
        "required": [
          "spec",
          "svg",
          "look"
        ]
      },
      "ProjectRoot": {
        "type": "object",
        "properties": {
          "rootId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "pattern": "^[A-Za-z0-9_.:-]+$"
          },
          "nodeId": {
            "type": "string",
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "remote": {
            "type": "string",
            "maxLength": 500
          },
          "remoteKey": {
            "type": "string",
            "maxLength": 500
          },
          "branch": {
            "type": "string",
            "maxLength": 200
          },
          "canonical": {
            "default": false,
            "type": "boolean"
          },
          "deviceId": {
            "type": "string"
          },
          "lastSeenAt": {
            "type": "string"
          },
          "hostState": {
            "type": "string",
            "enum": [
              "ready",
              "starting",
              "provisioning",
              "stopped",
              "error",
              "exited"
            ]
          },
          "distro": {
            "type": "string",
            "maxLength": 200
          },
          "targetState": {
            "type": "string",
            "enum": [
              "available",
              "stopped",
              "unavailable"
            ]
          },
          "classification": {
            "type": "string",
            "enum": [
              "public",
              "internal",
              "confidential",
              "restricted"
            ]
          }
        },
        "required": [
          "rootId",
          "canonical"
        ],
        "additionalProperties": false
      },
      "ProjectRootPutInput": {
        "type": "object",
        "properties": {
          "nodeId": {
            "type": "string",
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "maxLength": 100
          },
          "remote": {
            "type": "string",
            "maxLength": 500
          },
          "branch": {
            "type": "string",
            "maxLength": 200
          },
          "canonical": {
            "default": false,
            "type": "boolean"
          }
        }
      },
      "RefreshRequestInput": {
        "type": "object",
        "properties": {
          "refresh_token": {
            "type": "string"
          }
        },
        "required": [
          "refresh_token"
        ]
      },
      "RenameOrganisationInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "required": [
          "name"
        ]
      },
      "SetMemberRoleInput": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "admin",
              "member",
              "viewer"
            ]
          }
        },
        "required": [
          "role"
        ]
      },
      "SignInProviders": {
        "type": "object",
        "properties": {
          "providers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "google",
                    "github",
                    "microsoft",
                    "facebook",
                    "email"
                  ]
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "label"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "providers"
        ],
        "additionalProperties": false
      },
      "SsoDiscovery": {
        "type": "object",
        "properties": {
          "sso": {
            "type": "boolean"
          },
          "label": {
            "type": "string"
          },
          "enforced": {
            "type": "boolean"
          }
        },
        "required": [
          "sso"
        ],
        "additionalProperties": false
      },
      "StatusSummary": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "number",
            "const": 1
          },
          "overall": {
            "type": "string",
            "enum": [
              "ok",
              "degraded",
              "down"
            ]
          },
          "checkedAt": {
            "type": "string"
          },
          "components": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "api",
                    "database",
                    "redis",
                    "relay",
                    "mesh",
                    "releases"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "ok",
                    "degraded",
                    "down"
                  ]
                },
                "message": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "name",
                "state",
                "message",
                "checkedAt"
              ],
              "additionalProperties": false
            }
          },
          "incidents": {
            "type": "object",
            "properties": {
              "open": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "impact": {
                      "type": "string",
                      "enum": [
                        "minor",
                        "major",
                        "outage"
                      ]
                    },
                    "components": {
                      "maxItems": 6,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "api",
                          "database",
                          "redis",
                          "relay",
                          "mesh",
                          "releases"
                        ]
                      }
                    },
                    "updates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "at": {
                            "type": "string"
                          },
                          "text": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          }
                        },
                        "required": [
                          "at",
                          "text"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "resolvedAt": {
                      "type": "string"
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "updatedAt": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "title",
                    "impact",
                    "components",
                    "updates",
                    "startedAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "resolved": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "impact": {
                      "type": "string",
                      "enum": [
                        "minor",
                        "major",
                        "outage"
                      ]
                    },
                    "components": {
                      "maxItems": 6,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "api",
                          "database",
                          "redis",
                          "relay",
                          "mesh",
                          "releases"
                        ]
                      }
                    },
                    "updates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "at": {
                            "type": "string"
                          },
                          "text": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          }
                        },
                        "required": [
                          "at",
                          "text"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "startedAt": {
                      "type": "string"
                    },
                    "resolvedAt": {
                      "type": "string"
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "updatedAt": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "title",
                    "impact",
                    "components",
                    "updates",
                    "startedAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "open",
              "resolved"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "schemaVersion",
          "overall",
          "components",
          "incidents"
        ],
        "additionalProperties": false
      },
      "TokenError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "enum": [
              "authorization_pending",
              "slow_down",
              "expired_token",
              "access_denied",
              "invalid_grant",
              "invalid_dpop_proof"
            ]
          },
          "error_description": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "TokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          },
          "refresh_token": {
            "type": "string"
          },
          "expires_in": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "token_type": {
            "type": "string",
            "enum": [
              "Bearer",
              "DPoP"
            ]
          },
          "device_id": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          }
        },
        "required": [
          "access_token",
          "expires_in"
        ],
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "cloudRunCredential": {
        "type": "http",
        "scheme": "bearer",
        "description": "A cloud run's credential (`aioe_cr_…`), handed to the provider when the run is registered. It works for that run only, until the run ends or expires."
      },
      "deviceToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "A device access token from the device-code flow (`aioe_at_…`). A DPoP-bound token is sent as `Authorization: DPoP <token>` with a fresh `DPoP` proof on every request."
      },
      "scimToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "A team's SCIM token (`aioe_sc_…`), made by an owner under the team's single sign-on settings and given to the identity provider. It names its team, so every SCIM request acts on that team only."
      },
      "personToken": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Self-hosted AIOE: an access token from your organisation's identity provider. Its issuer selects the organisation."
      },
      "cloudSession": {
        "type": "http",
        "scheme": "bearer",
        "description": "Mojo Up AI Cloud: a person's access token from `/auth/v1/token`. Name the organisation with the `X-Aioe-Organisation` header where a request acts for one."
      }
    }
  }
}
