{
  "openapi": "3.1.0",
  "info": {
    "title": "AlianHub API",
    "version": "v2",
    "description": "Paths, methods, auth and tags only. The full reference is docs/API.md. Generated by npm run api:doc; do not edit by hand.",
    "x-built-from": "19460bc345b9"
  },
  "tags": [
    {
      "name": "Identity",
      "description": "Who a token is, and what that person may do."
    },
    {
      "name": "Read-only token API",
      "description": "Three reads under `/api/public-v1` that accept an API token and nothing else. They are the simplest way to list projects and tasks. Every read is narrowed to what the token's person can open in the web app, and a token limited to projects reads only those."
    },
    {
      "name": "Tasks",
      "description": "Creating a task and changing one. Both routes take the bodies the web app sends, so their field names follow the stored task. To read tasks, use [Everything](#everything) or the [Read-only token API](#read-only-token-api)."
    },
    {
      "name": "Everything",
      "description": "One list of tasks across every project the caller can read, with filters, grouping, sorting and a cursor, and the caller's saved views of that list."
    },
    {
      "name": "Projects",
      "description": "Duplicating a project, and saving a project as a template to start others from. To list projects, use `GET /api/public-v1/projects`."
    },
    {
      "name": "Pages",
      "description": "Docs and wiki pages, their version history, and who a comment on one can name. A page belongs to a project or to the workspace. A private page is its author's alone; any other page is open to whoever can see its project. A page the caller cannot see answers the same as one that does not exist."
    },
    {
      "name": "Agents",
      "description": "Read-only views of the workspace's AI agents: who they are, what they are running and what they have proposed. Runs and proposals are narrowed to the projects and tasks the caller can read."
    },
    {
      "name": "Dashboards",
      "description": "The answers of the Ask cards on a dashboard. These two routes sit under `/api/v1`; they are described here because a token can call them."
    },
    {
      "name": "Webhooks",
      "description": "Managing the webhooks described under [Webhook deliveries](#webhook-deliveries) above. A webhook belongs to the person who created it: nobody else can list, change or delete it, or read its delivery log."
    },
    {
      "name": "Goals",
      "description": "Goals with targets that show how far a team or a person has got. A goal has an owner, a period and up to 20 targets; its progress is the weighted average of its targets. A target is a `number`, a `currency` amount, a `boolean` or a `tasks` target counted from lists and tasks. A goal is `private` (its owner), `people` (its owner and the people it is shared with) or `workspace` (every member; a guest only when named). Guests can read goals shared with them and cannot create one. A token limited to projects cannot use these routes. A write made with an agent's token follows the rules that hold that agent."
    },
    {
      "name": "Whiteboards",
      "description": "One whiteboard for each list: task cards, sticky notes and text laid out on a canvas. A board is as open as its list: it can be read by whoever can open the list, and changed by whoever can edit the project while the list, its folders and the project are active. The title of a task card is shown only to someone who may open that task."
    },
    {
      "name": "Imports",
      "description": "Undoing an import that created tasks in bulk."
    },
    {
      "name": "Custom fields",
      "description": "Reading the tasks a relationship field links and the votes on a voting field, and casting a vote."
    },
    {
      "name": "Not documented in full"
    }
  ],
  "paths": {
    "/api/public-v1/projects": {
      "get": {
        "summary": "Lists the projects the token's person can open.",
        "tags": [
          "Read-only token API"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "stable",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/public-v1/tasks": {
      "get": {
        "summary": "Lists the tasks of one project, most recently updated first.",
        "tags": [
          "Read-only token API"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "stable",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/public-v1/tasks/{key}": {
      "get": {
        "summary": "Returns one task, looked up by its key.",
        "tags": [
          "Read-only token API"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "stable",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v1/ai/ask/card/{dashboardId}/{cardUid}": {
      "get": {
        "summary": "Returns the answer kept for the caller on one Ask card of a dashboard.",
        "tags": [
          "Dashboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cardUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Asks a question as the caller and keeps the answer for the caller on that card.",
        "tags": [
          "Dashboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cardUid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v1/project/{id}": {
      "get": {
        "summary": "Reads one project by its id.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v1/task/{id}": {
      "get": {
        "summary": "Reads one task by its id.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents": {
      "get": {
        "summary": "Lists the workspace's agents, oldest first.",
        "tags": [
          "Agents"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/account": {
      "get": {
        "summary": "Reads the caller's linked AI account.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Links the caller's AI account.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Unlinks the caller's AI account.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/alerts": {
      "get": {
        "summary": "Open agent incidents and recently resolved ones.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/alerts/evaluate": {
      "post": {
        "summary": "Runs the alert check now.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/budget": {
      "get": {
        "summary": "This month's agent spend against the budget.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/changes": {
      "get": {
        "summary": "What the caller's own connected agent just changed, for the audit ids in `ids` (at most 50), with whether each can still be undone. For a signed-in person.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/chat/direct": {
      "post": {
        "summary": "Opens the caller's conversation with an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/chat/usable": {
      "get": {
        "summary": "The agents the caller may mention in a conversation.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/connected": {
      "get": {
        "summary": "Each member's connected AI, for a signed-in member. With `taskId`, only the caller's own AI, and only where the caller may hand that task to it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/draft": {
      "post": {
        "summary": "Drafts a new agent; nothing is stored.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/manifest": {
      "get": {
        "summary": "What workflows and rules bind an agent by.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/memory/project/{projectId}": {
      "get": {
        "summary": "Reads what agents remember about a project.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Adds something for agents to remember about a project.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/memory/{id}": {
      "put": {
        "summary": "Changes a remembered item.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/metrics": {
      "get": {
        "summary": "Agent run metrics over a window.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/models": {
      "get": {
        "summary": "The models an agent may be pinned to.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/pause-all": {
      "post": {
        "summary": "Pauses every agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/pipeline": {
      "get": {
        "summary": "Tasks an agent has worked on.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/policy": {
      "get": {
        "summary": "Reads the workspace's agent policy.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes the workspace's agent policy.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/preferences": {
      "get": {
        "summary": "Reads the caller's own agent preferences.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes the caller's own agent preferences.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/project-limits/{projectId}": {
      "get": {
        "summary": "Reads a project's limits for agents: how many may work at once (`atOnce`) and whether agents are paused there (`paused`), with the defaults and the allowed range.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a project's limits for agents. Send `atOnce`, `paused` or both. Pausing takes held work-queue items back and stops the project's running agent runs. For an owner or admin who is signed in.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/project-manager/{projectId}": {
      "get": {
        "summary": "Reads whether a project's manager is on, and the findings from its daily look that the caller may open.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Turns a project's manager on or off (`on`). Turning it on looks at the project once straight away. For an owner or admin who is signed in.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/project-policy/{projectId}": {
      "get": {
        "summary": "Reads a project's policy for agents: whether an agent may close a task (`done`) and how far a connected agent may go on its own (`connected`), with the workspace defaults and the policy in force.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a project's policy for agents. Send `done`, `connected` or both. For an owner or admin who is signed in.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/proposals": {
      "get": {
        "summary": "Lists the changes agents have proposed and are waiting on a person for, newest first.",
        "tags": [
          "Agents"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Files a proposal. Only an agent does, in its own name.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/proposals/{id}/approve": {
      "post": {
        "summary": "Approves a proposal.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/proposals/{id}/decline": {
      "post": {
        "summary": "Declines a proposal.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/proposals/{id}/undo": {
      "post": {
        "summary": "Undoes an approved proposal.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/registry": {
      "get": {
        "summary": "The actions an agent may take.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/release": {
      "get": {
        "summary": "The release candidate agents have prepared.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/reports": {
      "get": {
        "summary": "The reports delivered to the caller, newest first.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/reports/{id}": {
      "get": {
        "summary": "Reads one report.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/routable": {
      "get": {
        "summary": "Open tasks the caller can see, for routing to an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/routing-policy": {
      "get": {
        "summary": "Reads which model each kind of task prefers.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes which model each kind of task prefers.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/runnable": {
      "get": {
        "summary": "The agents the caller may start on a task.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/runs": {
      "get": {
        "summary": "Lists agent runs, newest first, with a summary of the runs that are open now.",
        "tags": [
          "Agents"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Starts an agent on a task.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/runs/summary": {
      "get": {
        "summary": "The open runs and counts by status.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/runs/{id}": {
      "get": {
        "summary": "Returns one run with its steps, the audit rows of what it did, and the agent revision it ran on.",
        "tags": [
          "Agents"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/runs/{id}/replay": {
      "get": {
        "summary": "The prompts and raw responses of a run, for owners and admins.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/runs/{id}/revert": {
      "post": {
        "summary": "Undoes what a run changed.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/runs/{id}/stop": {
      "post": {
        "summary": "Stops a run.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/settings": {
      "get": {
        "summary": "Reads the workspace's agent settings.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes the workspace's agent settings.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/skills": {
      "get": {
        "summary": "Lists skills.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a skill.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/skills/catalogues": {
      "get": {
        "summary": "The skill catalogues.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/skills/egress-check": {
      "get": {
        "summary": "Whether a host is on the workspace's allowed list.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/skills/{key}": {
      "get": {
        "summary": "Reads a skill.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a skill.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Retires a skill.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/skills/{key}/dry-run": {
      "post": {
        "summary": "Shows what a skill would read and do, without doing it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/spend": {
      "get": {
        "summary": "What each agent spent in a month.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/standing-approvals/{projectId}": {
      "get": {
        "summary": "The standing approvals (\"Always do this\") of a project: every one for an owner or admin, the caller's own for a member. For a signed-in person.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/standing-approvals/{projectId}/{id}": {
      "delete": {
        "summary": "Removes a standing approval. Its maker, an owner or an admin may remove it. For a signed-in person.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/team": {
      "get": {
        "summary": "Returns the people and agents of the workspace, what each is on right now, and a short standup.",
        "tags": [
          "Agents"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/team/standup": {
      "get": {
        "summary": "The caller's own standup, from their activity.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/work-queue/held": {
      "get": {
        "summary": "The tasks an agent holds from the work queue right now, among the tasks the caller can open: the task, its project, the agent's name and since when.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/work-queue/task/{taskId}": {
      "get": {
        "summary": "What the work queue holds about a task: its items, which connected agent has claimed one, and whether the caller may hand the task over.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/work-queue/task/{taskId}/hand-over": {
      "post": {
        "summary": "Puts a task in the work queue for a connected agent to pick up, in a project whose manager is on.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/work-queue/{itemId}/take-back": {
      "post": {
        "summary": "Takes a work-queue item back from the agent that holds it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "session": []
          }
        ],
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/agents/{id}": {
      "put": {
        "summary": "Changes an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/pause": {
      "post": {
        "summary": "Pauses an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/resume": {
      "post": {
        "summary": "Resumes an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/revisions": {
      "get": {
        "summary": "Lists an agent's revisions.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a revision of an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/revisions/{n}": {
      "get": {
        "summary": "Reads one revision.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/agents/{id}/revisions/{n}/promote": {
      "post": {
        "summary": "Makes a revision the live one.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/revisions/{n}/rollback": {
      "post": {
        "summary": "Copies an older revision forward and makes it live.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "n",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/schedules": {
      "get": {
        "summary": "Lists an agent's schedules.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a schedule for an agent.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/agents/{id}/schedules/{scheduleId}": {
      "put": {
        "summary": "Changes a schedule.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes a schedule.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scheduleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/api-tokens/me": {
      "get": {
        "summary": "Returns the person and the workspace behind the token, with that person's role and permissions.",
        "tags": [
          "Identity"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "stable",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/assignment-rules/project/{projectId}": {
      "get": {
        "summary": "Needs a project the caller can open. Answers with `data`: `rules` (`entries` of person and sentence, `fallbackUserId`, `mode`, `onCreate`, `onChange`) and `ai.state`, whether AI is available.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Needs the permission to change the project's details. Reads `entries` (a list of at most 50 objects with `userId` and `when`, a sentence of at most 300 characters, one per person), `fallbackUserId` (id or empty), `mode` (`suggest` or `apply`, `suggest` when left out), `onCreate` (boolean, true when left out) and `onChange` (boolean, false when left out) from the body; each person must hold a seat and be able to open the project. Answers with `data`: the saved rules.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/assignment-rules/project/{projectId}/draft": {
      "post": {
        "summary": "Needs the permission to change the project's details, and AI must be on with a model configured (409 otherwise). Reads `userIds` (a list of 1 to 10 ids) from the body. Answers with `data.drafts`: a suggested rule sentence for each person who can open the project, based on their recent tasks there.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/assignment-rules/task/{taskId}": {
      "get": {
        "summary": "Needs a task the caller can open (404 otherwise). Answers with `data`: `decision`, the latest open suggestion for the task or `null`, and `pending`, whether one is still being worked out.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/assignment-rules/task/{taskId}/decisions/{decisionId}/accept": {
      "post": {
        "summary": "Needs the permission to change a task's assignee in the task's project. Assigns the suggested person to the task; 409 when the suggestion was already handled, the task already has an assignee, or the person can no longer open it. Answers with `data`: the decision.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/assignment-rules/task/{taskId}/decisions/{decisionId}/dismiss": {
      "post": {
        "summary": "Needs the permission to change a task's assignee in the task's project. Marks the suggestion dismissed. Answers with `data`: the decision.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/assignment-rules/task/{taskId}/decisions/{decisionId}/undo": {
      "post": {
        "summary": "Needs the permission to change a task's assignee in the task's project. Takes back an accepted suggestion. Answers with `data`: the decision.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "decisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations": {
      "get": {
        "summary": "Lists automations.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates an automation.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/backtest": {
      "post": {
        "summary": "Shows what a rule would have done on past events.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/compile": {
      "post": {
        "summary": "Turns a sentence or a rule into a checked automation.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/draft": {
      "post": {
        "summary": "Drafts an automation from a sentence.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/registry": {
      "get": {
        "summary": "The triggers and actions an automation can use.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/automations/{id}": {
      "put": {
        "summary": "Changes an automation.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes an automation.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/{id}/dry-run": {
      "post": {
        "summary": "Shows what an automation would do on a task, without doing it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/{id}/enabled": {
      "patch": {
        "summary": "Switches an automation on or off.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/automations/{id}/runs": {
      "get": {
        "summary": "Lists an automation's runs.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/billing/client-view": {
      "get": {
        "summary": "What a project's client sees of its billing.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/billing/client-view/message": {
      "post": {
        "summary": "Sends a message from the client view.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/billing/contract": {
      "get": {
        "summary": "Reads a project's billing contract.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a project's billing contract.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/billing/hourly": {
      "get": {
        "summary": "A month's billable hours for a project.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/billing/milestone": {
      "post": {
        "summary": "Adds a billing milestone.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/billing/milestone/{id}": {
      "patch": {
        "summary": "Changes a billing milestone.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/calls/notes": {
      "get": {
        "summary": "Lists the caller's own call notes.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Saves the notes of a call.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/calls/notes/{id}": {
      "get": {
        "summary": "Reads one set of call notes.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "patch": {
        "summary": "Changes a set of call notes.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/ai/jobs/{jobId}": {
      "get": {
        "summary": "Any signed-in member of the workspace, and only for a job that person started; any other id answers 404 `Job not found.`. Answers with `data`: the job and its progress.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/custom-fields/compute": {
      "post": {
        "summary": "Needs the permission to change a task's custom field. Reads `taskIds` (a list of 1 to 200 ids) and `scope` (`sprint` or left out) from the body; only tasks the caller can open are computed. Answers with `data`: `updated`, the computed `values` and `errors`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/formula/scope": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Reads `projectId` (id) and `taskId` (id, used only when the caller can open the task) from the query. Answers with `data`: `names` a formula may use, with the task's values when a task is named, and the lists of `functions` and `rollupFunctions`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/custom-fields/formula/validate": {
      "post": {
        "summary": "Any signed-in member of the workspace may call it. Reads `expression` (string, required), `fieldId`, `fieldTitle`, `projectId` (ids and string) and `sample` (an object of values to try it on) from the body. A formula that does not parse or that closes a cycle answers a failed status with a `code`. Answers with `data`: `references`, `functions`, `preview` and `previewError`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/links/resolve": {
      "post": {
        "summary": "Returns, for each task named, the tasks its relationship fields link and the tally of its voting fields.",
        "tags": [
          "Custom fields"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/{fieldId}/ai/apply": {
      "post": {
        "summary": "Any signed-in member of the workspace who can edit that field on the task. Reads `proposalIds` (a list of up to 5 ids from a preview the same person made) from the body; an expired one is refused. Answers with `data`: `applied` (task ids) and `refused` (with a reason each).",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/{fieldId}/ai/jobs": {
      "post": {
        "summary": "Any signed-in member of the workspace who can edit that field on the tasks. Reads `taskIds` (a list of ids, up to the workspace's bulk limit) and `proposalIds` (a list of up to 5 ids) from the body. The fill runs in the background. Answers with `data`: the job.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/{fieldId}/ai/preview": {
      "post": {
        "summary": "Any signed-in member of the workspace who can edit that field on the task; a task they cannot edit it on comes back with a `reason` instead. Reads `taskIds` (a list of 1 to 5 ids) from the body. Nothing is written. Answers with `data.proposals`: for each task, a `proposalId`, the proposed `text` and `fieldValue`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/{fieldId}/delete": {
      "post": {
        "summary": "Needs the same rights as the usage read; a connected agent is refused. Takes the field and every value of it away for good; archiving (the field update with `isDelete`) hides a field and keeps its values. A field that a rollup or a formula reads answers 409 with the code `FIELD_IS_READ` and the same `readBy` and `readElsewhere`. Answers with `data.tasks`: how many tasks the caller could open held a value.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/custom-fields/{fieldId}/usage": {
      "get": {
        "summary": "Needs the permission to edit custom fields in the field's projects, and the field setting for a field of every project. Answers with `data`: `tasks` (how many tasks the caller can open hold a value), `partial` (true when the caller cannot open every task), `readBy` (the titles of the rollups and formulas that read this field) and `readElsewhere` (true when a field of a project the caller cannot open reads it). An unknown id answers 404.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/custom-fields/{fieldId}/vote": {
      "post": {
        "summary": "Casts or withdraws the caller's own vote on a voting field of a task.",
        "tags": [
          "Custom fields"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/deleteManualLogtime": {
      "post": {
        "summary": "Deletes a manual time entry. Needs a task the caller can open. Reads `timeSheetId`, `logTimeDate`, `dateFormat`, `startLogTime`, `endLogTime`, `projectId`, `ticketId`, `sprintId`, `taskName` and `projectName` from the body, all required, plus `timeDuration` (minutes), `userId` and `folderId`. Deleting another person's entry needs the Everyone grant on the user timesheet and an open project, else 403. An entry in an approved, locked period is refused. Answers with `statusText` `Logtime deleted successfully`. It also writes task history and a notification.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/epics": {
      "get": {
        "summary": "Needs a project the caller can open, named by the query field `projectId` (id). Answers with `data`: the project's epics, oldest first, with `taskCount` and `completedCount` counted over the tasks the caller can open.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Needs the permission to create tasks in the project named by `projectId`. Reads `name` (string, required), `projectId` (id, required), `description`, `color`, `priority`, `ownerUserId` (strings), `startDate` and `dueDate` from the body; a failed check answers a failed status with the reason. Answers with `data`: the new epic.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/epics/assign": {
      "post": {
        "summary": "Needs the permission to create tasks in the projects of both the task and the epic. Reads `taskId` (id) and `epicId` (id, or empty or null to take the task out) from the body; a task the caller cannot open, or an epic that does not exist, answers a failed status. Answers with `data`: `taskId` and `epicId`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/epics/{id}": {
      "put": {
        "summary": "Needs the permission to create tasks in the epic's project. Reads `name`, `color`, `description`, `status`, `priority`, `ownerUserId`, `startDate` and `dueDate` from the body and changes the ones sent; a body with none of them answers a failed status. Answers with `data`: the epic as it is now.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Needs the permission to create tasks in the epic's project. The epic is marked deleted and its tasks are unlinked from it. Answers with `statusText` `Epic deleted.` and no `data`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/epics/{id}/recount": {
      "post": {
        "summary": "Needs the permission to create tasks in the epic's project. Counts the epic's tasks again and answers with `data`: the epic with `taskCount` and `completedCount`, counted for tasks the caller can open.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/exports": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it, and it lists only the caller's own exports (a `uid` of someone else answers 403). Answers with `data`: up to 20 exports, newest first, each with `type`, `format`, `status`, `fileName`, `total`, `processed`, `error` and `createdAt`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Any signed-in member of the workspace who can list the project's tasks (404 otherwise). Reads `format` (`csv` or `xlsx`), `projectId` (id), `sprintId` (id, optional) and `projectName` (string) from the body. The export runs in the background. Answers with `data`: the job.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/exports/workspace": {
      "post": {
        "summary": "Owners and admins only. Reads `format` (`csv` or `xlsx`, `xlsx` when left out) from the body. The export runs in the background. Answers with `data`: the job's `_id`, `type`, `format`, `status`, `fileName` and `createdAt`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/exports/{id}/download": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it, for an export the caller started; a workspace export also needs the owner or admin role. Answers with the file once the export has finished, and 404 `Export not ready.` before that.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/forms": {
      "get": {
        "summary": "Needs a project the caller can open, named by the query field `projectId` (id); otherwise 404. Answers with `data`: the project's forms, newest first, each with `title`, `description`, `sprintId`, `state` and `submissionCount`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Needs edit rights on the project named in the body (403 without them, 404 when it cannot be seen). Reads `title` (string, required), `projectId` (id, required), `description` (string) and `sprintId` (id) from the body. The form starts as a draft with no questions. Answers with `data`: the form.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/forms/fields": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Answers with `data`: the questions a form can ask, as `groups`, the `widgets`, `spans`, `gridColumns` and the task fields a question can be mapped to.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/forms/{id}": {
      "get": {
        "summary": "Needs a project the caller can open; otherwise 404 `Form not found.`. Answers with `data`: the form with its questions, and its public `url` while it is live.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Needs edit rights on the form's project. Reads `title`, `description`, `successMessage` (strings), `sprintId` (id), `questions` (list), `defaults` (object) and `state` from the body and changes the ones sent; a failed check answers a failed status with the reason. Answers with `data`: the form as it is now.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Needs edit rights on the form's project. A form that is published answers a failed status, and must be taken offline first. The form is marked deleted and the tasks it filed are kept. Answers with `statusText` `Form deleted.` and no `data`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/forms/{id}/publish": {
      "post": {
        "summary": "Needs edit rights on the form's project (403 without them, 404 when the project cannot be seen). Reads `publish` (boolean, true when left out; false takes the form offline) from the body. A form that fails the checks for going live answers a failed status with the reason. Answers with `data`: `state` and, when live, `token` and `url`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/forms/{id}/submissions": {
      "get": {
        "summary": "Needs edit rights on the form's project, because submissions hold the submitters' answers. Reads `q` (string, up to 120 characters, matched against every answer), `page` and `limit` (numbers, 10 per page by default and at most 100) and `all` (`1` returns up to 5000 rows for an export) from the query. Answers with `data`: `submissions`, `total`, `page`, `pages` and `truncated`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/goals": {
      "get": {
        "summary": "Lists the goals the caller can read, by name.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a goal, with its targets if they are sent.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/for-task/{taskId}": {
      "get": {
        "summary": "Lists the targets that count a task, with the goal each belongs to.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/goals/{id}": {
      "get": {
        "summary": "Returns one goal, live or archived.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "patch": {
        "summary": "Changes a goal's name, period, audience, colour or owner. Only the keys sent are changed.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/archive": {
      "post": {
        "summary": "Archives a goal. It leaves the live list and can be restored.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/restore": {
      "post": {
        "summary": "Brings an archived goal back to the live list.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/summary": {
      "post": {
        "summary": "Writes a short summary of a goal's progress with the workspace's AI, keeps it on the goal and answers with the whole goal.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/targets": {
      "post": {
        "summary": "Adds a target to a goal and answers with the whole goal.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/targets/{targetId}": {
      "patch": {
        "summary": "Changes what a target is: its name, weight, range, unit, currency or sources. Its value has a route of its own.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Removes a target and answers with the whole goal.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/goals/{id}/targets/{targetId}/value": {
      "put": {
        "summary": "Sets the current value of a `number` or `currency` target, or whether a `boolean` target is done.",
        "tags": [
          "Goals"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports": {
      "get": {
        "summary": "Lists imports.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/imports/asana": {
      "post": {
        "summary": "Imports from Asana.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/clickup": {
      "post": {
        "summary": "Imports from ClickUp.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/clickup/preview": {
      "post": {
        "summary": "Previews a ClickUp import.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/clickup/project": {
      "post": {
        "summary": "Imports a ClickUp export as a new project.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/csv": {
      "post": {
        "summary": "Imports tasks from a CSV file.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/csv/preview": {
      "post": {
        "summary": "Previews a CSV import.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/jira": {
      "post": {
        "summary": "Imports from Jira.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/monday": {
      "post": {
        "summary": "Imports from Monday.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/trello": {
      "post": {
        "summary": "Imports from Trello.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/imports/{id}/undo": {
      "post": {
        "summary": "Moves the tasks an import created to the trash.",
        "tags": [
          "Imports"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/intake": {
      "get": {
        "summary": "Lists submissions waiting for review.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/intake/review": {
      "post": {
        "summary": "Accepts or rejects a submission.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/invoices": {
      "get": {
        "summary": "Lists a project's invoices.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/invoices/draft-from-milestone": {
      "post": {
        "summary": "Drafts an invoice from a milestone.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/invoices/draft-from-month": {
      "post": {
        "summary": "Drafts an invoice from a month of logged time.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/invoices/{id}": {
      "get": {
        "summary": "Reads an invoice.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a draft invoice.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes a draft invoice.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/invoices/{id}/paid": {
      "post": {
        "summary": "Marks an invoice as paid.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/invoices/{id}/send": {
      "post": {
        "summary": "Issues an invoice.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/manualLogtime": {
      "post": {
        "summary": "Adds a manual time entry to a task, or edits one. Needs a task the caller can open. Reads `logTimeDate`, `description`, `startLogTime`, `endLogTime`, `timeDuration` (a string like `HH:MM`), `ticketId`, `projectId`, `isEdit` (a boolean), `dateFormat`, `taskName`, `projectName`, `sprintId` and `timeZone` from the body, all required, plus `timeSheetId` and `previousLoggedTime` when `isEdit` is true. Optional: `userId`, `billable`, `folderId`, `companyOwnerId`. Logging for another person needs the Everyone grant on the user timesheet and the project must be open to the caller, else 403. The person must be a member (400). An entry in an approved, locked period is refused. Answers with `statusText` `Logtime added successfully` and `data`: the saved entry. It also writes task history and a notification.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages": {
      "get": {
        "summary": "Lists pages, without their bodies.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a page in a project, or in the workspace when no project is named.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/ai": {
      "post": {
        "summary": "Any signed-in member of the workspace may call it. Reads `action`, `title`, `instruction` and `currentText` (strings) and `pageId` (id of a page the caller may read, whose title and text fill in what is left out) from the body. Answers with `data`: the composed text, or a failed status with the reason, and `isNotAi` when no AI is set up.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/ai-status": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Answers with `data.configured`: whether an AI provider is set up for writing pages.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/pages/{id}": {
      "get": {
        "summary": "Returns one page with its body.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Changes a page's title, body or properties. Only the keys sent are changed.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Moves a page to the trash, together with the pages under it that the caller can see.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/approve": {
      "put": {
        "summary": "Needs edit rights on the page, and a share by name as editor is not enough; a person must make the call. Only a page an agent drafted can be approved, else a failed status. Answers with `data`: the page.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/comments": {
      "get": {
        "summary": "Any signed-in member who may read the page. Answers with `data`: the page's comments, oldest first, up to 500, with `limit` and `atLimit`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Any signed-in member who may read the page. Reads `message` (string), `blockId` (string), `parentId` (id of a comment to reply under) and an attached file as `mediaURL`, `mediaOriginalName` and `mediaSize` from the body. A page holds at most 500 comments (409). Answers with `data`: the comment.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/comments/people": {
      "get": {
        "summary": "Lists the ids of the people a comment on a page may mention or be assigned to.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/pages/{id}/comments/{commentId}": {
      "put": {
        "summary": "Only the comment's author, who must be able to read the page (403 for anyone else). Reads `message` (string) from the body. Answers with `data`: the comment as it is now.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "The comment's author or an admin, who must be able to read the page. A thread is deleted with its replies. Answers with `data._id`: the id of the comment.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/comments/{commentId}/assign": {
      "put": {
        "summary": "Assigns a comment thread to a person, or clears the assignment.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/comments/{commentId}/reaction": {
      "put": {
        "summary": "Puts the caller's reaction on a comment, or takes it off if it is already there.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/comments/{commentId}/resolve": {
      "put": {
        "summary": "Any signed-in member who may read the page; a thread that has an assignee can be resolved only by the assignee, the person who assigned it or an admin, and a reply cannot be resolved (400). Reads `resolved` (boolean, true when left out; false reopens the thread) from the body. Answers with `data`: the comment.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/images": {
      "post": {
        "summary": "Needs edit rights on the page. Takes a multipart body with the image as `file`. Answers with `data.key`: the key to put in the page's image block.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/restore": {
      "put": {
        "summary": "Takes a page back out of the trash. Only the page itself: the pages that went with it are restored one by one.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/review": {
      "put": {
        "summary": "Needs edit rights on the page, and a share by name as editor is not enough. Reads `nextReviewDate` (a date, three months ahead when left out) from the body, marks the page as a wiki page reviewed now by the caller, and answers with `data`: the page.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/shares": {
      "get": {
        "summary": "Only the page's author, or an owner or admin who can open it (403 for anyone else). Answers with `data`: `people`, each with `userId`, `role`, `by`, `at` and `active`, and `limit`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/pages/{id}/shares/{userId}": {
      "put": {
        "summary": "Only the page's author, or an owner or admin who can open it. Reads `role` (`viewer` or `editor`, `viewer` when left out) from the body; the person must be an active member of the workspace, and a page can be shared with a limited number of people (400 otherwise). Answers with `data`: the list of people the page is shared with.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Only the page's author, or an owner or admin who can open it. Answers with `data`: the list of people the page is still shared with.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/versions": {
      "get": {
        "summary": "Lists the versions kept for a page, newest first, without their bodies.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Keeps the page as it is now as a version, with a name when one is given.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/versions/{versionId}": {
      "get": {
        "summary": "Returns one version with its body.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "put": {
        "summary": "Names a version, or clears its name.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/pages/{id}/versions/{versionId}/restore": {
      "post": {
        "summary": "Puts a version's title and body back on the page. The page as it was is kept as a version first.",
        "tags": [
          "Pages"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/projects/templates": {
      "get": {
        "summary": "Lists the project templates the caller may use, by name.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/projects/templates/{id}": {
      "patch": {
        "summary": "Changes a template's name, description or whether it is offered to everyone.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes a template and the task rows it kept. Projects made from it are not affected.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/projects/templates/{id}/use": {
      "post": {
        "summary": "Creates a project from a template, with its folders, lists and, when asked, its tasks.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/projects/{id}/duplicate": {
      "post": {
        "summary": "Copies a project: its settings, folders, lists and automations, and its tasks when asked.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "get": {
        "summary": "Reports how far the tasks of a large copy have got.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/projects/{id}/template": {
      "post": {
        "summary": "Saves a project's settings, folders, lists and, when asked, its tasks and automations as a template.",
        "tags": [
          "Projects"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/public-shares": {
      "get": {
        "summary": "Lists the public links of something.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a public link to a list, a report or a page.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/public-shares/{id}": {
      "put": {
        "summary": "Switches a public link on or off.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Revokes a public link.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/reactions": {
      "post": {
        "summary": "Any signed-in member of the workspace who can read the target. Reads `targetType` (`task` or `comment`), `targetId` (id), `emoji` (string) and `isProjectComment` (boolean) from the body; the caller's own reaction is added, or removed if it is already there. A target the caller cannot read answers 404. Answers with `data.reactions`: the target's reactions.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/search": {
      "post": {
        "summary": "Any signed-in member of the workspace may call it. Reads `query` (string) from the body and matches it against task names and keys, project names, comment text and page titles, within the projects, lists and pages the caller can open. Answers with `data`: `tasks`, `projects`, `comments` and `pages`, each limited in number.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/backlog": {
      "post": {
        "summary": "Needs a project the caller can open. Reads `projectId` (id) from the body. Answers with `data`: the project's backlog list, which is made first if it does not exist.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/burndown": {
      "post": {
        "summary": "Needs a project the caller can open and a list the caller can see. Reads `sprintId` (id) from the body. Answers with `data`: the sprint's name, state, goal and dates, its totals of tasks, estimate and points, and a `days` series with the ideal line.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/complete": {
      "post": {
        "summary": "Needs write access to the list's project and the permission to create lists there; a person must make the call. Reads `sprintId` (id) and `incompleteDestination` (`next`, `backlog` or the id of an open sprint of the same project, `next` when left out) from the body. Unfinished tasks move to the destination. Answers with `data`: the completed sprint; a sprint already completed answers success and moves nothing.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/complete-preview": {
      "get": {
        "summary": "Needs a project the caller can open and a list the caller can see. Reads `sprintId` (id) from the query; a list that is not a sprint answers a failed status. Answers with `data`: the sprint's state, commitment, tasks added after the start, and the counts of finished work and of unfinished work with a `list` of it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/sprints/hours": {
      "post": {
        "summary": "Needs a project the caller can open and a list the caller can see. Reads `sprintId` (id) from the body. Answers with `data`: `plannedMinutes`, `loggedMinutes` and `overdueMinutes`, the minutes the sprint is projected to run over its plan.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/report": {
      "get": {
        "summary": "Needs a project the caller can open and a list the caller can see. Reads `sprintId` (id) from the query; a list that is not a sprint answers a failed status. Answers with `data`: the sprint's state, goal and dates, and the totals of what was committed, completed and left unfinished, with the tasks added after the start and those moved out.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/sprints/scrum": {
      "post": {
        "summary": "Needs write access to the list's project and the permission to create lists there; a person must make the call. Reads `sprintId` (id), `isScrum` (boolean; false turns Scrum off), `goal` (string), `startDate` and `endDate` (dates, both or neither, the end after the start) from the body. A completed sprint cannot be edited, and a running one cannot have Scrum turned off. Answers with `data`: the sprint.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/sprints/start": {
      "post": {
        "summary": "Needs write access to the list's project and the permission to create lists there; a person must make the call. Reads `sprintId` (id) from the body. The list must be a sprint with a start and end date, and a project runs one sprint at a time; the tasks in it become the sprint's commitment. Answers with `data`: the started sprint, or a failed status with the reason.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/task-templates": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Reads `projectId` (id, optional) from the query: with it, the workspace's templates and that project's, for a project the caller can open; without it, the workspace's templates and those of every project the caller can open. Answers with `data`, sorted by name, each with `name`, `scope`, `projectId`, `isDefault`, `canManage` and a count of what it carries.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Allowed for owners and admins when `scope` is `workspace`, and otherwise for those who can create tasks in the task's project. Reads `name` (string, required), `scope` (`project` or `workspace`, `project` when left out), `taskId` (id of the task to copy from, required) and `include` (an object of booleans, where `false` leaves a part out) from the body. Answers with `data`: the template.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/task-templates/default": {
      "put": {
        "summary": "Needs the permission to change the project's details. Reads `projectId` (id, required) and `templateId` (id, or empty to clear the default) from the body; the template must be a workspace one or that project's. Answers with `statusText` saying whether a default was set or cleared.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/task-templates/{id}": {
      "patch": {
        "summary": "Allowed for owners and admins on a workspace template, and for those who can create tasks in the project on a project template. Reads `name` (string, required) from the body. Answers with `statusText` `Template renamed.` and no `data`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Allowed for owners and admins on a workspace template, and for those who can create tasks in the project on a project template. The template is marked deleted and is no longer any project's default. Answers with `statusText` `Template deleted.` and no `data`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/task-templates/{id}/apply": {
      "post": {
        "summary": "Needs the permission to create tasks in the task's project; fields the caller's role may not change are skipped and named. Reads `taskId` (id, required), `overwrite` and `preview` (booleans) from the body; with `preview` true nothing is written. Answers with `data`: `applied`, `conflicts`, `skipped`, `checklistAdded` and `subtasksCreated`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks": {
      "post": {
        "summary": "Creates a task, or a subtask when `data.ParentTaskId` names a parent.",
        "tags": [
          "Tasks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "patch": {
        "summary": "Changes one task. `action` names the change, and the other keys of the body depend on it.",
        "tags": [
          "Tasks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/bulk": {
      "post": {
        "summary": "Runs one change on many tasks at once. The caller must be able to open every task in `taskIds` and hold the permission for the chosen action in their projects, for example `task.task_status` for `bulkUpdateStatus`, `task.task_delete` for `bulkDelete`, `task.task_archive` for `bulkArchive`, `task.task_move` for `bulkMove`. Reads `action` (string, must start with `bulk` and be a known bulk action such as `bulkUpdateStatus`, `bulkUpdatePriority`, `bulkUpdateDueDate`, `bulkUpdateStartDate`, `bulkUpdateDates`, `bulkUpdateAssignee`, `bulkUpdateTags`, `bulkArchive`, `bulkRestore`, `bulkDelete`, `bulkTrash`, `bulkMove`, `bulkConvertToSubTask`, `bulkConvertToTask`, `bulkAddToList`, `bulkDuplicate`) and `taskIds` (list of ids) from the body, plus the fields that action takes, such as `newStatus`, `firebaseObj`, `DueDate`, `startDate`, `employeeId`, `tagId`, `sprintObj`, `projectData`, `parentTaskId`. Answers with `data`: `updated`, `skipped` (task id and reason), `errors`, `totals` (counts of each), and statusText 'Bulk operation completed'. A bad or unknown action answers `status` false with 'Invalid bulk action' or 'Unknown bulk action'. A task or destination the caller cannot open answers 404, a missing permission answers 403.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/everything": {
      "post": {
        "summary": "Lists tasks from every project the caller can read, filtered, grouped, sorted and paged.",
        "tags": [
          "Everything"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/everything/views": {
      "get": {
        "summary": "Lists the caller's own saved views of the Everything list, by name.",
        "tags": [
          "Everything"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Saves a view: a name and the settings of the Everything list.",
        "tags": [
          "Everything"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/everything/views/{id}": {
      "patch": {
        "summary": "Changes the name, the settings or the default mark of one of the caller's views.",
        "tags": [
          "Everything"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes one of the caller's views.",
        "tags": [
          "Everything"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/relations": {
      "post": {
        "summary": "Links two tasks, unlinks them, or lists a task's links. The caller must be able to open the task, with the `task.task_list` permission in its project. Reads `action` (string: `add`, `remove`, `list` or `openBlockers`) and `companyId` from the body, then `taskId` (id, required), and for `add` and `remove` also `relatedTaskId` (id); for `add` it also reads `type` (one of `blocks`, `blocked_by`, `duplicates`, `duplicated_by`, `relates_to`). Answers with the handler's own envelope: `status`, `statusText` and `data`. For `add` and `remove`, `data` holds `taskId`, `relatedTaskId` and `relations` (only the links the caller can open). For `list`, `data` is the linked tasks, each with `taskId`, `type`, `label`, `createdBy`, `createdAt` and a short `task` summary. For `openBlockers`, `data` is the `blocked_by` links whose blocking task is still open. Failures such as a missing task or two tasks already linked answer `status` false with the error text as statusText. An unknown `action` answers `status` false with 'Invalid relation action'.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tasks/{id}/lists": {
      "get": {
        "summary": "Lists the other lists a task has been added to, besides its own.",
        "tags": [
          "Tasks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/timesheet-approval/bulk-review": {
      "post": {
        "summary": "Approves or rejects several submitted timesheet periods at once. Only an owner or admin has any effect; for others every id is skipped as `not_allowed`. Reads `ids` (a list of record ids, 1 to 100) and `action` (`approve` or `reject`) from the body, both required, plus `reason` (required to reject). Bad input answers 400. Answers with `data`: `results` (one `id` and `outcome` each, `skipped` ones with a `reason`) and `counts` (`approved`, `sent_back`, `skipped`).",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/timesheet-approval/mine": {
      "get": {
        "summary": "Lists a person's timesheet submissions, newest period first. Any signed-in member of the workspace may call it. Reads `userId` from the query. Only an owner or admin may read another person's list; for anyone else `userId` is ignored and their own is read. Answers with `data`: the approval records.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/timesheet-approval/pending": {
      "get": {
        "summary": "Lists submitted timesheet periods that wait for review. Only an owner or admin may call it; others get `status` false with `statusText` `Only an owner or admin can review timesheets.` Reads nothing. Answers with `data`: the submitted records, oldest first.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/timesheet-approval/queue": {
      "get": {
        "summary": "Lists submitted timesheet periods with the context a reviewer needs. Only an owner or admin may call it; others get `status` false. Reads `hoursPerDay` (a number, default 8) from the query. Answers with `data`: the submitted records, oldest first, each with `userName`, `userAvatar`, `totalMinutes`, `entryCount`, `billableMinutes`, `nonBillableMinutes`, `capacityMinutes` and `overMinutes`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/timesheet-approval/status": {
      "get": {
        "summary": "Reads the approval record of one timesheet period. Any signed-in member of the workspace may call it. Reads `periodStart` and `periodEnd` (dates, required) and `userId` from the query. Only an owner or admin may read another person's record; for anyone else `userId` is ignored and their own is read. Answers with `data`: the approval record, or null when none exists.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/timesheet-approval/submit": {
      "post": {
        "summary": "Sends a timesheet period in for approval. Any signed-in member of the workspace may call it. A member submits their own sheet; an owner or admin may pass another member's `userId`, otherwise it is refused. Reads `periodStart` and `periodEnd` (dates, required), `periodType` (string, default `week`), `note` (string) and `userId` from the body. A period that is already approved is refused. It saves the period as submitted with the minutes and entry count logged in it. Answers with `statusText` `Timesheet submitted for approval.` and `data`: the approval record.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/timesheet-approval/{id}/review": {
      "post": {
        "summary": "Approves, rejects or reopens a submitted timesheet period. Only an owner or admin may call it; others get `status` false. Reads `id` (the approval record id) from the path and `action` (`approve`, `reject` or `reopen`) and `reason` (string, needed to reject) from the body. The record must be in a state that allows the action. An owner or admin may approve their own week, and the record is marked as self approved. Answers with `statusText` like `Timesheet approved.` and `data`: the updated record.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/tracker/handshake": {
      "get": {
        "summary": "What the desktop tracker reads before anyone signs in. Public. Answers with `data`: `app` (always `alianhub`), `version` (the server's), `name` and `logoUrl` (the ones the sign-in page shows), `tracker` with `enabled` (whether any workspace here has the time tracker in its plan) and `minVersion` (the oldest tracker this server accepts), and `managed` (whether AlianHub hosts this instance).",
        "tags": [
          "Not documented in full"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false
      }
    },
    "/api/v2/trash": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Reads `kind` (`projects`, `folders`, `lists`, `tasks` or `docs`, `projects` when left out) from the query. Lists only what the caller could open. Answers with `data`: the trashed items, each with a `title`, a `code` and a `projectId`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/trash/{kind}/{id}/restore": {
      "put": {
        "summary": "Needs what deleting that kind needed, in the project the item belongs to; a person must make the call; a doc is judged by the doc rules. The path `kind` is `projects`, `folders`, `lists`, `tasks` or `docs`, and `id` an id. Projects and lists come back together with their tasks. Answers with `data`: the `kind` and `id`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/view-templates": {
      "get": {
        "summary": "Any signed-in member of the workspace may call it. Answers with `data`, sorted by name, each template with `name`, `viewType` and `canManage`, which is true for owners and admins.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Needs the permission to change the project's views. Reads `projectId` (id), `viewId` (string) and `name` (string) from the body, and keeps the setup of that view as a template; a workspace holds a limited number. Answers with `data`: the template.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/view-templates/{id}": {
      "patch": {
        "summary": "Owners and admins only. Reads `name` (string, required) from the body. Answers with `data`: the renamed template.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Owners and admins only. The template is marked deleted. Answers with `statusText` `Template deleted.` and no `data`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/webhooks": {
      "get": {
        "summary": "Lists the caller's own webhooks. The signing secret is never returned here.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a webhook and returns its signing secret, once.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/webhooks/events": {
      "get": {
        "summary": "Lists the events a webhook can subscribe to.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/webhooks/{id}": {
      "put": {
        "summary": "Changes a webhook, or switches it on or off. Only the keys sent are changed.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes a webhook, its delivery log and its signing secret.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/webhooks/{id}/logs": {
      "get": {
        "summary": "Lists a webhook's deliveries, newest first.",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/whiteboards/{projectId}/{sprintId}": {
      "get": {
        "summary": "Returns the board of a list: its cards, notes and texts.",
        "tags": [
          "Whiteboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sprintId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      },
      "patch": {
        "summary": "Adds, moves and removes elements on a board, as a change on the revision the caller last read.",
        "tags": [
          "Whiteboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sprintId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/whiteboards/{projectId}/{sprintId}/history": {
      "get": {
        "summary": "Lists the earlier states kept for a board, newest first.",
        "tags": [
          "Whiteboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sprintId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "read"
      }
    },
    "/api/v2/whiteboards/{projectId}/{sprintId}/restore": {
      "post": {
        "summary": "Puts an earlier state of a board back, as a new revision.",
        "tags": [
          "Whiteboards"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sprintId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": true,
        "x-token-scope": "write"
      }
    },
    "/api/v2/who-can-see/{kind}/{id}": {
      "get": {
        "summary": "Who can see a project, a list or a page.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/workflows/approvals": {
      "get": {
        "summary": "Lists workflow steps waiting for a decision.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/workflows/definitions": {
      "get": {
        "summary": "Lists workflow definitions.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Creates a workflow definition.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/definitions/{id}": {
      "put": {
        "summary": "Changes a workflow definition.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      },
      "delete": {
        "summary": "Deletes a workflow definition.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/definitions/{id}/enabled": {
      "patch": {
        "summary": "Switches a workflow definition on or off.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/dry-run": {
      "post": {
        "summary": "Shows what a workflow would do, without doing it.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs": {
      "get": {
        "summary": "Lists workflow runs.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      },
      "post": {
        "summary": "Starts a workflow run.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}": {
      "get": {
        "summary": "Reads a workflow run and its steps.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/compensate": {
      "post": {
        "summary": "Undoes a step.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/decide": {
      "post": {
        "summary": "Approves or rejects a step.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/reassign": {
      "post": {
        "summary": "Hands a step's decision to someone else.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/resume": {
      "post": {
        "summary": "Resumes a step.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/retry": {
      "post": {
        "summary": "Retries a step.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/runs/{id}/steps/{stepId}/skip": {
      "post": {
        "summary": "Skips a step.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v2/workflows/step-types": {
      "get": {
        "summary": "The step types a workflow can use.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "read"
      }
    },
    "/api/v3/timeTracker/start": {
      "post": {
        "summary": "Starts a tracker timer on a task, for the desktop tracker. Any signed-in member of the workspace may call it. The caller can only start a timer for themselves; a `userId` naming someone else answers 403. Only users marked as tracker users may start one, else it answers `isPermissionDenied`. Reads `description`, `projectId` and `taskId` from the body, all required, plus `considerActionTime` (boolean) and `actionTime` (a Unix time in seconds) to set the start time. A start in an approved, locked period is refused. Answers with `statusText`: the id of the new time entry.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v3/timetracker/capture": {
      "post": {
        "summary": "Stores a tracker screenshot on a running timer and moves its end time forward. Any signed-in member of the workspace may call it. Reads `file`, `path`, `companyId`, `timeSheetId`, `key`, `imageName`, `prevscreenShot`, `screenShotTime`, `memoName` and `strokes` (a JSON string) from a form upload; all are required. `companyId` must match the company header, `timeSheetId` must be a timer of the caller that is still running, and `path` must lie in that timer's own capture folder, or it answers 403 (a path already stored answers 409). The image is the uploaded file. Answers with `statusText` `Data Update Succesfully`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    },
    "/api/v4/timetracker/capture": {
      "post": {
        "summary": "Stores a tracker screenshot on a running timer and moves its end time forward, for the desktop tracker. Any signed-in member of the workspace may call it. Reads `file`, `path`, `companyId`, `timeSheetId`, `key`, `imageName`, `prevscreenShot`, `screenShotTime`, `memoName` and `strokes` (a JSON string) from a form upload; all are required. `companyId` must match the company header, `timeSheetId` must be a timer of the caller that is still running, and `path` must lie in that timer's own capture folder, or it answers 403 (a path already stored answers 409). The image is the uploaded file. Only tracker users may use it, else it answers `isPermissionDenied`. It also reads `considerActionTime` and `actionTime` (seconds) to set the end time. Answers with `statusText` `Data Update Succesfully`.",
        "tags": [
          "Not documented in full"
        ],
        "security": [
          {
            "apiToken": [],
            "companyId": []
          }
        ],
        "responses": {
          "200": {
            "description": "The standard response body."
          }
        },
        "x-stability": "beta",
        "x-documented": false,
        "x-token-scope": "write"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "A personal access token."
      },
      "companyId": {
        "type": "apiKey",
        "in": "header",
        "name": "companyid",
        "description": "The workspace the request is for."
      },
      "platformKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-platform-key",
        "description": "PLATFORM_API_KEY of a hosted instance (HOSTING_MODE=managed)."
      },
      "session": {
        "type": "apiKey",
        "in": "cookie",
        "name": "accessToken",
        "description": "The web app's signed-in session."
      }
    }
  }
}
