{
  "openapi": "3.1.0",
  "info": {
    "title": "TasksMate API",
    "description": "The TasksMate public API: JSON over HTTPS, under `/v1`.\n\n- **Authentication:** a TasksMate access token (`TasksMateToken` \u2014 one organization, scopes you choose, optionally limited to some projects; `admin` implies every scope) or a Supabase session JWT.\n- **Errors:** always `application/problem+json` with `type`, `title`, `status`, `detail`, `instance` and `request_id`. The types are listed below.\n- **Lists:** `{data, next_cursor}`. Page with `limit` and `cursor`; order with `sort_by` and `sort_order`.\n- **Conditional requests:** single reads return an `ETag`. Send it as `If-None-Match` for a 304, or as `If-Match` on a write \u2014 a stale one is a 412.\n- **Safe retries:** creates honour an `Idempotency-Key` for 24 h.\n- **Search:** `GET /v1/tasks?filter[search]=\u2026`.\n\n**Problem types**\n\n| `type` | Meaning |\n|---|---|\n| `about:blank` | A plain HTTP error; the status and `detail` say everything. |\n| `urn:tasksmate:problem:validation` | The request body or query did not validate. `errors` lists each failure (`loc`, `msg`, `type`). |\n| `urn:tasksmate:problem:invalid-parameter` | A query parameter is outside what the operation accepts; `errors[].allowed` lists the valid values. |\n| `urn:tasksmate:problem:precondition-failed` | `If-Match` did not match the resource's current `ETag` \u2014 re-read it and retry. |\n| `urn:tasksmate:problem:idempotency-key-reused` | This `Idempotency-Key` was first used for a different request (method, path or body). |\n| `urn:tasksmate:problem:idempotency-key-in-flight` | The first request with this `Idempotency-Key` has not finished; retry shortly. |\n| `urn:tasksmate:problem:idempotency-key-invalid` | `Idempotency-Key` must be 1\u2013255 printable ASCII characters. |\n| `urn:tasksmate:problem:rate-limit` | Too many requests with this access token; wait `Retry-After` seconds (`X-RateLimit-*` say where you stand). |\n| `urn:tasksmate:problem:internal` | An unexpected server error. Quote `request_id` to support. |\n| `urn:tasksmate:problem:token-invalid` | The access token is unknown or malformed (or its principal no longer exists). |\n| `urn:tasksmate:problem:token-expired` | The access token is past its `expires_at`; mint a new one. |\n| `urn:tasksmate:problem:token-revoked` | The access token was revoked (by its owner, an admin, a rotation, or its service account's deactivation). |\n| `urn:tasksmate:problem:insufficient-scope` | The access token does not carry the scope this operation needs (`errors[0].required`; null = not available to tokens). |\n| `urn:tasksmate:problem:test-token-read-only` | A `tm_test_` token can authenticate and read, never write. |\n| `urn:tasksmate:problem:token-policy` | The organization's token policy refuses this token (personal tokens off, expiry required, or past the maximum lifetime). |\n| `urn:tasksmate:problem:url-refused` | The webhook URL is refused: not https, carries credentials, or resolves to a private, loopback, link-local, metadata, multicast or reserved address (`errors[0].reason`). |",
    "version": "2026-09-25"
  },
  "paths": {
    "/v1/health": {
      "get": {
        "tags": [
          "health"
        ],
        "summary": "Liveness probe",
        "operationId": "health.read",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                },
                "example": {
                  "status": "ok"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [],
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "description": "Liveness probe."
      }
    },
    "/v1/organizations": {
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "Organizations you belong to or are invited to",
        "description": "The organizations you are a member of or have a pending invitation to, as organization cards (`is_invite` marks an invitation), paginated as `{data, next_cursor}`.",
        "operationId": "organizations.list",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name, created_at, role. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: name, created_at, role. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_OrgCard_"
                },
                "example": {
                  "data": [
                    {
                      "org_id": "O123456",
                      "name": "Acme Corp",
                      "description": "A global tech company.",
                      "role": "owner",
                      "designation": "string",
                      "project_count": 0,
                      "member_count": 0,
                      "created_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "owners": [
                        "string"
                      ],
                      "is_invite": false,
                      "invitation_id": "O123456"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/organizations/{org_id}": {
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "Read an organization",
        "operationId": "organizations.read",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationInDB"
                },
                "example": {
                  "name": "Acme Corp",
                  "description": "A global tech company.",
                  "designations": [
                    "string"
                  ],
                  "logo": "https://example.com/logo.png",
                  "email": "info@acme.com",
                  "plan": "pro",
                  "role": "owner",
                  "metadata": {
                    "industry": "tech"
                  },
                  "designation": "string",
                  "org_id": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_deleted": false,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string",
                  "project_count": 0,
                  "owners": [
                    "string"
                  ],
                  "access_status": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ],
        "description": "Read an organization."
      }
    },
    "/v1/projects": {
      "post": {
        "tags": [
          "projects"
        ],
        "summary": "Create a project",
        "description": "Create a project and immediately return a fully-hydrated `ProjectCard` instance.",
        "operationId": "projects.create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectCreate"
              },
              "example": {
                "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                "name": "Website Redesign",
                "description": "Redesign the company website.",
                "metadata": {
                  "budget": 10000
                },
                "status": "not_started",
                "priority": "high",
                "start_date": "2024-07-01",
                "end_date": "2024-12-31",
                "created_by": "string",
                "updated_by": "string",
                "is_active": true,
                "delete_reason": "string",
                "owner": "string",
                "team_members": [
                  "string"
                ],
                "visibility": "public",
                "team_id": "string",
                "owner_designation": "manager",
                "team_member_designations": [
                  {
                    "id": "string",
                    "designation": "string"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectCard"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "name": "Website Redesign",
                  "description": "Redesign the company website.",
                  "metadata": {
                    "budget": 10000
                  },
                  "status": "not_started",
                  "priority": "high",
                  "start_date": "2024-07-01",
                  "end_date": "2024-12-31",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "delete_reason": "string",
                  "owner": "string",
                  "team_members": [
                    "string"
                  ],
                  "visibility": "public",
                  "team_id": "string",
                  "project_id": "P00001",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "tasks_total": 25,
                  "tasks_completed": 15,
                  "progress_percent": 60.0,
                  "leads": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "assigned_by": "string",
                      "assigned_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "position": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "create",
        "x-scopes": [
          "projects:write"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Replay the first response for 24 h when the same request is retried with this key."
          }
        ]
      }
    },
    "/v1/projects/{org_id}": {
      "get": {
        "tags": [
          "projects"
        ],
        "summary": "List an organization's projects you can read",
        "description": "The organization's projects, paginated as `{data, next_cursor}`.\n\n- `show_all=true` returns every project you can read: public projects, the projects you are a member of, and \u2014 for org owners and admins \u2014 all of them. Private projects you are not a member of never appear.\n- `show_all=false` returns only the projects you are a member of.\n- `filter[status]`, `filter[priority]`, `filter[team]` (team ids) and `filter[project]` (project ids) narrow the list.\n- `filter[search]` matches the name, description or id (case-insensitive substring).\n- `filter[start_after]` / `filter[start_before]` (`YYYY-MM-DD`, inclusive) bound the start date \u2014 the creation date when a project has none.",
        "operationId": "projects.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "show_all",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true,
              "title": "Show All"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]`, `filter[priority]`, `filter[team]`, `filter[project]`, `filter[search]`, `filter[start_after]`, `filter[start_before]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]`, `filter[priority]`, `filter[team]`, `filter[project]`, `filter[search]`, `filter[start_after]`, `filter[start_before]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name, position, status, priority, start_date, end_date, created_at, updated_at, progress_percent, project_id, visibility. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: name, position, status, priority, start_date, end_date, created_at, updated_at, progress_percent, project_id, visibility. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ProjectCard_"
                },
                "example": {
                  "data": [
                    {
                      "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                      "name": "Website Redesign",
                      "description": "Redesign the company website.",
                      "metadata": {
                        "budget": 10000
                      },
                      "status": "not_started",
                      "priority": "high",
                      "start_date": "2024-07-01",
                      "end_date": "2024-12-31",
                      "created_by": "string",
                      "updated_by": "string",
                      "is_active": true,
                      "delete_reason": "string",
                      "owner": "string",
                      "team_members": [
                        "string"
                      ],
                      "visibility": "public",
                      "team_id": "string",
                      "project_id": "P00001",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "tasks_total": 25,
                      "tasks_completed": 15,
                      "progress_percent": 60.0,
                      "leads": [
                        {
                          "user_id": "string",
                          "username": "string",
                          "assigned_by": "string",
                          "assigned_at": "2026-09-25T12:00:00Z"
                        }
                      ],
                      "position": 0
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/projects/detail/{project_id}": {
      "get": {
        "tags": [
          "projects"
        ],
        "summary": "Read a project",
        "operationId": "projects.read",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "name": "Website Redesign",
                  "description": "Redesign the company website.",
                  "metadata": {
                    "budget": 10000
                  },
                  "status": "not_started",
                  "priority": "high",
                  "start_date": "2024-07-01",
                  "end_date": "2024-12-31",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "delete_reason": "string",
                  "owner": "string",
                  "team_members": [
                    "string"
                  ],
                  "visibility": "public",
                  "team_id": "string",
                  "project_id": "string",
                  "editors_can_add_members": false,
                  "leads": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "assigned_by": "string",
                      "assigned_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ],
        "description": "Read a project."
      }
    },
    "/v1/projects/{project_id}": {
      "put": {
        "tags": [
          "projects"
        ],
        "summary": "Update a project (PUT; partial)",
        "operationId": "projects.replace",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectUpdate"
              },
              "example": {
                "org_id": "string",
                "name": "string",
                "description": "string",
                "metadata": {},
                "status": "planning",
                "priority": "high",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "is_active": false,
                "delete_reason": "string",
                "owner": "string",
                "team_members": [
                  "string"
                ],
                "visibility": "public",
                "editors_can_add_members": false,
                "team_id": "string",
                "owner_designation": "string",
                "team_member_designations": [
                  {
                    "id": "string",
                    "designation": "string"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "name": "Website Redesign",
                  "description": "Redesign the company website.",
                  "metadata": {
                    "budget": 10000
                  },
                  "status": "not_started",
                  "priority": "high",
                  "start_date": "2024-07-01",
                  "end_date": "2024-12-31",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "delete_reason": "string",
                  "owner": "string",
                  "team_members": [
                    "string"
                  ],
                  "visibility": "public",
                  "team_id": "string",
                  "project_id": "string",
                  "editors_can_add_members": false,
                  "leads": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "assigned_by": "string",
                      "assigned_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "deprecated": true,
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients."
      },
      "patch": {
        "tags": [
          "projects"
        ],
        "summary": "Update a project (JSON merge-patch)",
        "operationId": "projects.update",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectUpdate"
              },
              "example": {
                "org_id": "string",
                "name": "string",
                "description": "string",
                "metadata": {},
                "status": "planning",
                "priority": "high",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "is_active": false,
                "delete_reason": "string",
                "owner": "string",
                "team_members": [
                  "string"
                ],
                "visibility": "public",
                "editors_can_add_members": false,
                "team_id": "string",
                "owner_designation": "string",
                "team_member_designations": [
                  {
                    "id": "string",
                    "designation": "string"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "name": "Website Redesign",
                  "description": "Redesign the company website.",
                  "metadata": {
                    "budget": 10000
                  },
                  "status": "not_started",
                  "priority": "high",
                  "start_date": "2024-07-01",
                  "end_date": "2024-12-31",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "delete_reason": "string",
                  "owner": "string",
                  "team_members": [
                    "string"
                  ],
                  "visibility": "public",
                  "team_id": "string",
                  "project_id": "string",
                  "editors_can_add_members": false,
                  "leads": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "assigned_by": "string",
                      "assigned_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Update a project (JSON merge-patch)."
      },
      "delete": {
        "tags": [
          "projects"
        ],
        "summary": "Delete (archive) a project",
        "operationId": "projects.delete",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Delete (archive) a project."
      }
    },
    "/v1/tasks": {
      "post": {
        "tags": [
          "tasks"
        ],
        "summary": "Create a task",
        "operationId": "tasks.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskCreate"
              },
              "example": {
                "project_id": "project-1234",
                "org_id": "org-1234",
                "sub_tasks": [
                  "task-5678"
                ],
                "dependencies": [
                  "task-4321"
                ],
                "title": "Implement Login",
                "description": "Implement OAuth2 login flow.",
                "status": "not_started",
                "assignee": "",
                "start_date": "2024-07-31",
                "due_date": "2024-08-01",
                "priority": "high",
                "task_type": "task",
                "tags": [
                  "backend",
                  "auth"
                ],
                "type_data": {},
                "metadata": [
                  {
                    "field": "status",
                    "new": "in_progress",
                    "old": "not_started"
                  }
                ],
                "created_by": "string",
                "updated_by": "string",
                "is_subtask": false,
                "bug_id": "B1234",
                "tracker_id": "TR1234",
                "restricted_to": [],
                "team_id": "string",
                "sprint_id": "SP12345",
                "milestone_id": "MS12345",
                "goal_id": "G12345"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "create",
        "x-scopes": [
          "tasks:write"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Replay the first response for 24 h when the same request is retried with this key."
          }
        ],
        "description": "Create a task."
      },
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "List / search tasks (the filter grammar; `filter[search]` is search)",
        "description": "List the tasks you can see, one page at a time.\n\n**Pagination**\n- The response is `{\"data\": [TaskCardView\u2026], \"next_cursor\": \"<opaque>\" | null}`; pass `next_cursor` back as `cursor` for the next page. `null` means the end.\n- A page can be `data: []` with a non-null `next_cursor` (every task on it was restricted) \u2014 keep following the cursor until it is null.\n- A cursor is bound to the filters, sort and scope it was issued for; reusing it with a different query is a 400.\n\n**Scope and visibility**\n- `project_id`: you must be able to read the project (it is public, you are a member, or you are an org admin).\n- `org_id`: you must be a member of the organization; tasks come from the projects you can read, plus tasks filed in no project.\n- Private projects you are not a member of never appear.\n- Restricted tasks you may not open are left out \u2014 or returned with `has_access: false` when `include_inaccessible=true`.\n\n**Filters**\n- Repeat `filter[...]` as needed: comma-separated values are OR-ed within a key; different keys are AND-ed.\n- An unknown key, a malformed date, a non-boolean `filter[overdue]`, or an unknown status, priority or type is a 400 naming the value.\n- `filter[task_type]` takes `task`, `bug`, `agent`. A type is a label, not a permission: it only narrows what you can already see.\n- `filter[search]` matches title, description, task id and tags; add `filter[search_fields]=title` for the title only.\n\n**Sort**\n- `sort_by`: `task_id`, `title`, `status`, `priority`, `due_date`, `start_date`, `created_at`, `assignee`, `project_id`, `priority_rank`, `status_rank`, `task_type`; `sort_order`: `asc` or `desc`.\n- Ties break on `task_id`; empty values sort last.\n- `priority` sorts by rank: critical > high > medium > low > none. `status` too: backlog > in_progress > not_started > blocked > completed. `task_type`: task, bug, agent.\n\n**Sections**\n- `section_scope=user:me`, `project:<id>` or `team:<id>` adds `section_id` and `section_position` for that scope (`null` when the task is in no section there).\n- `section_scope=own` uses each task's own home: its project, or its team when it has no project; a task with neither is unsectioned. `own` works on this operation only.",
        "operationId": "tasks.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Organization scope; required unless project_id is given. Membership is checked; only projects the caller may read (public, member-of, or all for org admins) plus unfiled tasks are listed.",
              "title": "Org Id"
            },
            "description": "Organization scope; required unless project_id is given. Membership is checked; only projects the caller may read (public, member-of, or all for org admins) plus unfiled tasks are listed."
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Project scope; the caller must be able to read the project (public, or member, or org admin).",
              "title": "Project Id"
            },
            "description": "Project scope; the caller must be able to read the project (public, or member, or org admin)."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size, default 100; silently clamped to 1000.",
              "default": 100,
              "title": "Limit"
            },
            "description": "Page size, default 100; silently clamped to 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque token from the previous page's `next_cursor`. Only ever echo it back; `offset` is ignored when it is given.",
              "title": "Cursor"
            },
            "description": "Opaque token from the previous page's `next_cursor`. Only ever echo it back; `offset` is ignored when it is given."
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type (400 otherwise).",
              "default": "title",
              "title": "Sort By"
            },
            "description": "One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type (400 otherwise)."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "asc or desc (400 otherwise).",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "asc or desc (400 otherwise)."
          },
          {
            "name": "include_inaccessible",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "If true, include tasks the current user cannot access due to `restricted_to`, marked with has_access=False. If false (default), those tasks are not returned. Membership is always required: rows only come from the project / org the caller belongs to.",
              "default": false,
              "title": "Include Inaccessible"
            },
            "description": "If true, include tasks the current user cannot access due to `restricted_to`, marked with has_access=False. If false (default), those tasks are not returned. Membership is always required: rows only come from the project / org the caller belongs to."
          },
          {
            "name": "filter[status]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Task status(es), comma-separated or repeated.",
              "title": "Filter[Status]"
            },
            "description": "Task status(es), comma-separated or repeated."
          },
          {
            "name": "filter[priority]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Priority(ies), comma-separated or repeated.",
              "title": "Filter[Priority]"
            },
            "description": "Priority(ies), comma-separated or repeated."
          },
          {
            "name": "filter[assignee]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Usernames, or `me` for the caller.",
              "title": "Filter[Assignee]"
            },
            "description": "Usernames, or `me` for the caller."
          },
          {
            "name": "filter[project]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Project ids, or `__unfiled__` for tasks without a project (mixable).",
              "title": "Filter[Project]"
            },
            "description": "Project ids, or `__unfiled__` for tasks without a project (mixable)."
          },
          {
            "name": "filter[tags]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Tasks carrying any of these tags.",
              "title": "Filter[Tags]"
            },
            "description": "Tasks carrying any of these tags."
          },
          {
            "name": "filter[due_after]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "YYYY-MM-DD, inclusive.",
              "title": "Filter[Due After]"
            },
            "description": "YYYY-MM-DD, inclusive."
          },
          {
            "name": "filter[due_before]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "YYYY-MM-DD, inclusive.",
              "title": "Filter[Due Before]"
            },
            "description": "YYYY-MM-DD, inclusive."
          },
          {
            "name": "filter[created_after]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "YYYY-MM-DD, inclusive.",
              "title": "Filter[Created After]"
            },
            "description": "YYYY-MM-DD, inclusive."
          },
          {
            "name": "filter[created_before]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "YYYY-MM-DD, inclusive.",
              "title": "Filter[Created Before]"
            },
            "description": "YYYY-MM-DD, inclusive."
          },
          {
            "name": "filter[overdue]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`true` \u2192 due before today and not completed.",
              "title": "Filter[Overdue]"
            },
            "description": "`true` \u2192 due before today and not completed."
          },
          {
            "name": "filter[search]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Case-insensitive substring of the title, description, task id or any tag; `%`, `_`, `*`, `,` and `(` are matched literally.",
              "title": "Filter[Search]"
            },
            "description": "Case-insensitive substring of the title, description, task id or any tag; `%`, `_`, `*`, `,` and `(` are matched literally."
          },
          {
            "name": "filter[search_fields]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`all` (default) or `title` to match the title only.",
              "title": "Filter[Search Fields]"
            },
            "description": "`all` (default) or `title` to match the title only."
          },
          {
            "name": "filter[team]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Team ids, or `__none__` for tasks without a team (the two can be mixed).",
              "title": "Filter[Team]"
            },
            "description": "Team ids, or `__none__` for tasks without a team (the two can be mixed)."
          },
          {
            "name": "filter[task_type]",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "One or more of `task`, `bug`, `agent`, comma-separated or repeated; any other value (including `goal`) is a 400.",
              "title": "Filter[Task Type]"
            },
            "description": "One or more of `task`, `bug`, `agent`, comma-separated or repeated; any other value (including `goal`) is a 400."
          },
          {
            "name": "section_scope",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`user:me`, `project:<id>`, `team:<id>`, or `own` (each task at its own project's or team's scope). An unknown scope is a 400.",
              "title": "Section Scope"
            },
            "description": "`user:me`, `project:<id>`, `team:<id>`, or `own` (each task at its own project's or team's scope). An unknown scope is a 400."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Deprecated alias of filter[search].",
              "deprecated": true,
              "title": "Search"
            },
            "description": "Deprecated alias of filter[search].",
            "deprecated": true
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Deprecated alias of filter[status].",
              "deprecated": true,
              "title": "Status"
            },
            "description": "Deprecated alias of filter[status].",
            "deprecated": true
          },
          {
            "name": "unfiled",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Deprecated alias of filter[project]=__unfiled__ (ignored when project_id is given).",
              "deprecated": true,
              "title": "Unfiled"
            },
            "description": "Deprecated alias of filter[project]=__unfiled__ (ignored when project_id is given).",
            "deprecated": true
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Deprecated; use `cursor`. Ignored when a cursor is given.",
              "deprecated": true,
              "default": 0,
              "title": "Offset"
            },
            "description": "Deprecated; use `cursor`. Ignored when a cursor is given.",
            "deprecated": true
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskListPage"
                },
                "example": {
                  "data": [
                    {
                      "project_id": "project-1234",
                      "org_id": "org-1234",
                      "sub_tasks": [
                        "task-5678"
                      ],
                      "dependencies": [
                        "task-4321"
                      ],
                      "title": "Implement Login",
                      "description": "Implement OAuth2 login flow.",
                      "status": "not_started",
                      "assignee": "",
                      "start_date": "2024-07-31",
                      "due_date": "2024-08-01",
                      "priority": "high",
                      "task_type": "task",
                      "tags": [
                        "backend",
                        "auth"
                      ],
                      "type_data": {},
                      "metadata": [
                        {
                          "field": "status",
                          "new": "in_progress",
                          "old": "not_started"
                        }
                      ],
                      "created_by": "string",
                      "updated_by": "string",
                      "is_subtask": false,
                      "bug_id": "B1234",
                      "tracker_id": "TR1234",
                      "restricted_to": [],
                      "team_id": "string",
                      "sprint_id": "SP12345",
                      "milestone_id": "MS12345",
                      "goal_id": "G12345",
                      "task_id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "restricted_to_user_ids": [
                        "string"
                      ],
                      "comments": 0,
                      "has_access": true,
                      "has_edit_access": false,
                      "section_id": "string",
                      "section_position": 0.0
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/tasks/{task_id}": {
      "get": {
        "tags": [
          "tasks"
        ],
        "summary": "Read a task",
        "operationId": "tasks.read",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:read"
        ],
        "description": "Read a task."
      },
      "put": {
        "tags": [
          "tasks"
        ],
        "summary": "Update a task (PUT; partial)",
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients.\n\nRequires edit access to the task: a project owner or editor, an org admin, or the assignee \u2014 on a restricted task, its creator, its assignee or an org admin. Setting `restricted_to` also requires permission to restrict the task.",
        "operationId": "tasks.replace",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskUpdate"
              },
              "example": {
                "project_id": "project-1234",
                "org_id": "org-1234",
                "sub_tasks": [
                  "task-5678"
                ],
                "dependencies": [
                  "task-4321"
                ],
                "title": "Implement Login",
                "description": "Implement OAuth2 login flow.",
                "status": "in_progress",
                "assignee": "",
                "start_date": "2024-07-31",
                "due_date": "2024-08-01",
                "priority": "high",
                "task_type": "task",
                "tags": [
                  "backend",
                  "auth"
                ],
                "type_data": {},
                "metadata": [
                  {
                    "field": "status",
                    "new": "in_progress",
                    "old": "not_started"
                  }
                ],
                "created_by": "string",
                "updated_by": "string",
                "is_subtask": false,
                "bug_id": "B1234",
                "tracker_id": "TR1234",
                "restricted_to": [
                  "string"
                ],
                "team_id": "string",
                "sprint_id": "SP12345",
                "milestone_id": "MS12345",
                "goal_id": "G12345"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "deprecated": true
      },
      "patch": {
        "tags": [
          "tasks"
        ],
        "summary": "Update a task (JSON merge-patch)",
        "description": "Requires edit access to the task: a project owner or editor, an org admin, or the assignee \u2014 on a restricted task, its creator, its assignee or an org admin. Setting `restricted_to` also requires permission to restrict the task.",
        "operationId": "tasks.update",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskUpdate"
              },
              "example": {
                "project_id": "project-1234",
                "org_id": "org-1234",
                "sub_tasks": [
                  "task-5678"
                ],
                "dependencies": [
                  "task-4321"
                ],
                "title": "Implement Login",
                "description": "Implement OAuth2 login flow.",
                "status": "in_progress",
                "assignee": "",
                "start_date": "2024-07-31",
                "due_date": "2024-08-01",
                "priority": "high",
                "task_type": "task",
                "tags": [
                  "backend",
                  "auth"
                ],
                "type_data": {},
                "metadata": [
                  {
                    "field": "status",
                    "new": "in_progress",
                    "old": "not_started"
                  }
                ],
                "created_by": "string",
                "updated_by": "string",
                "is_subtask": false,
                "bug_id": "B1234",
                "tracker_id": "TR1234",
                "restricted_to": [
                  "string"
                ],
                "team_id": "string",
                "sprint_id": "SP12345",
                "milestone_id": "MS12345",
                "goal_id": "G12345"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "delete": {
        "tags": [
          "tasks"
        ],
        "summary": "Delete a task",
        "description": "You must be able to read the task, and to delete it: a project owner or org admin, or \u2014 when you may edit the task \u2014 its creator or assignee.",
        "operationId": "tasks.delete",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/project": {
      "post": {
        "tags": [
          "tasks"
        ],
        "summary": "Move a task to another project (or unfile it)",
        "description": "Move the task into `project_id`, or take it out of its project with `project_id: null`. Same permissions and result as updating the task's `project_id`; returns the updated task.",
        "operationId": "tasks.set_project",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskProjectSet"
              },
              "example": {
                "project_id": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/sprint": {
      "put": {
        "tags": [
          "tasks"
        ],
        "summary": "File a task in a team sprint (or none)",
        "description": "File the task into a team sprint (`sprint_id: null` takes it out). Anyone who may edit the task may do this, without needing any right over the sprint itself.\n\nThe sprint must belong to a team the task is reachable from: the task is in one of the team's projects, or it is filed under that team with no project. An unknown sprint is a 404; an unreachable one is a 422 whose message says why.\n\nTaking a task out clears `sprint_id` and deletes nothing.",
        "operationId": "tasks.set_sprint",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSprintSet"
              },
              "example": {
                "sprint_id": "SP12345"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/milestone": {
      "put": {
        "tags": [
          "tasks"
        ],
        "summary": "Attach a task to a team milestone (or none)",
        "description": "File the task under a team milestone; `milestone_id: null` takes it out.\n\n- **Who:** anyone who may edit the task \u2014 no right over the milestone itself is needed.\n- **Which milestones:** one of a team the task is reachable from (a project of that team, or filed under the team with no project).\n- **Errors:** 404 for an unknown milestone, 422 when it is unreachable.\n- Taking a task out clears `milestone_id` and deletes nothing. Independent of the task's sprint.",
        "operationId": "tasks.set_milestone",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskMilestoneSet"
              },
              "example": {
                "milestone_id": "MS12345"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/section": {
      "put": {
        "tags": [
          "tasks"
        ],
        "summary": "Place a task in a section",
        "description": "Move the task into a section of one scope (`section_id: null` takes it out of that scope's section; the task is never deleted). Requires edit access to the task and access to the scope. The move is recorded in the task's history.",
        "operationId": "tasks.set_section",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSectionSet"
              },
              "example": {
                "scope_type": "project",
                "scope_id": "string",
                "section_id": "string",
                "position": 0.0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskSectionOut"
                },
                "example": {
                  "task_id": "string",
                  "scope_type": "project",
                  "scope_id": "string",
                  "section_id": "string",
                  "position": 0.0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/subtasks": {
      "post": {
        "tags": [
          "tasks"
        ],
        "summary": "Add a subtask link",
        "description": "Append a subtask to an existing task (`edit` on the parent, `read` on the subtask).",
        "operationId": "tasks.add_subtask",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubtaskLink"
              },
              "example": {
                "subtask_id": "T123456"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/subtasks/{subtask_id}": {
      "delete": {
        "tags": [
          "tasks"
        ],
        "summary": "Remove a subtask link",
        "description": "Remove a subtask from an existing task.",
        "operationId": "tasks.remove_subtask",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "subtask_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subtask Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/dependencies": {
      "post": {
        "tags": [
          "tasks"
        ],
        "summary": "Add a dependency",
        "description": "Append a dependency to an existing task (`edit` on the task, `read` on the dependency).",
        "operationId": "tasks.add_dependency",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DependencyLink"
              },
              "example": {
                "dependency_id": "T654321"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/tasks/{task_id}/dependencies/{dependency_id}": {
      "delete": {
        "tags": [
          "tasks"
        ],
        "summary": "Remove a dependency",
        "description": "Remove a dependency from an existing task.",
        "operationId": "tasks.remove_dependency",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "dependency_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Dependency Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "org_id": "org-1234",
                  "sub_tasks": [
                    "task-5678"
                  ],
                  "dependencies": [
                    "task-4321"
                  ],
                  "title": "Implement Login",
                  "description": "Implement OAuth2 login flow.",
                  "status": "not_started",
                  "assignee": "",
                  "start_date": "2024-07-31",
                  "due_date": "2024-08-01",
                  "priority": "high",
                  "task_type": "task",
                  "tags": [
                    "backend",
                    "auth"
                  ],
                  "type_data": {},
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "created_by": "string",
                  "updated_by": "string",
                  "is_subtask": false,
                  "bug_id": "B1234",
                  "tracker_id": "TR1234",
                  "restricted_to": [],
                  "team_id": "string",
                  "sprint_id": "SP12345",
                  "milestone_id": "MS12345",
                  "goal_id": "G12345",
                  "task_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "restricted_to_user_ids": [
                    "string"
                  ],
                  "has_access": false,
                  "has_edit_access": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/organization-members/{org_id}": {
      "get": {
        "tags": [
          "organization-members"
        ],
        "summary": "List an organization's members",
        "description": "The organization's active members, paginated as `{data, next_cursor}`. `filter[role]` and `filter[designation]` (the designation's display name) narrow the list. Each member carries `kind`: `user` or `service_account`.",
        "operationId": "organization-members.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "name": "role",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Role"
            }
          },
          {
            "name": "is_active",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Is Active"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[role]`, `filter[designation]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[role]`, `filter[designation]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: updated_at, accepted_at, invited_at, username, email, role. Default: `updated_at`.",
              "default": "updated_at",
              "title": "Sort By"
            },
            "description": "One of: updated_at, accepted_at, invited_at, username, email, role. Default: `updated_at`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_OrganizationMemberInDB_"
                },
                "example": {
                  "data": [
                    {
                      "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                      "email": "invitee@example.com",
                      "username": "invitee@example.com",
                      "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                      "designation_id": "DG0001",
                      "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                      "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "is_active": true,
                      "invited_at": "2026-09-25T12:00:00Z",
                      "accepted_at": "2026-09-25T12:00:00Z",
                      "updated_by": "string",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "deleted_at": "2026-09-25T12:00:00Z",
                      "delete_reason": "string",
                      "deleted_by": "string",
                      "last_active_at": "2026-09-25T12:00:00Z",
                      "kind": "user"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/organization-members/{user_id}/{org_id}": {
      "get": {
        "tags": [
          "organization-members"
        ],
        "summary": "Read one member",
        "operationId": "organization-members.read",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationMemberInDB"
                },
                "example": {
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "username": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "is_active": true,
                  "invited_at": "2026-09-25T12:00:00Z",
                  "accepted_at": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string",
                  "deleted_by": "string",
                  "last_active_at": "2026-09-25T12:00:00Z",
                  "kind": "user"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ],
        "description": "Read one member."
      },
      "put": {
        "tags": [
          "organization-members"
        ],
        "summary": "Change a member's role / designation (PUT)",
        "operationId": "organization-members.replace",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationMemberUpdate"
              },
              "example": {
                "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                "designation_id": "DG0001",
                "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                "is_active": true,
                "invited_at": "2026-09-25T12:00:00Z",
                "accepted_at": "2026-09-25T12:00:00Z",
                "updated_by": "string",
                "updated_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "delete_reason": "string",
                "deleted_by": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationMemberInDB"
                },
                "example": {
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "username": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "is_active": true,
                  "invited_at": "2026-09-25T12:00:00Z",
                  "accepted_at": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string",
                  "deleted_by": "string",
                  "last_active_at": "2026-09-25T12:00:00Z",
                  "kind": "user"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "deprecated": true,
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients."
      },
      "patch": {
        "tags": [
          "organization-members"
        ],
        "summary": "Change a member's role / designation",
        "operationId": "organization-members.update",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationMemberUpdate"
              },
              "example": {
                "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                "designation_id": "DG0001",
                "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                "is_active": true,
                "invited_at": "2026-09-25T12:00:00Z",
                "accepted_at": "2026-09-25T12:00:00Z",
                "updated_by": "string",
                "updated_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "delete_reason": "string",
                "deleted_by": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationMemberInDB"
                },
                "example": {
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "username": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "is_active": true,
                  "invited_at": "2026-09-25T12:00:00Z",
                  "accepted_at": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string",
                  "deleted_by": "string",
                  "last_active_at": "2026-09-25T12:00:00Z",
                  "kind": "user"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Change a member's role / designation."
      },
      "delete": {
        "tags": [
          "organization-members"
        ],
        "summary": "Remove a member",
        "operationId": "organization-members.delete",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Remove a member."
      }
    },
    "/v1/organization-invites": {
      "post": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Invite someone to an organization",
        "operationId": "organization-invites.create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationInviteCreate"
              },
              "example": {
                "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                "email": "invitee@example.com",
                "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                "designation_id": "DG0001",
                "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                "invite_status": "pending",
                "sent_at": "2026-09-25T12:00:00Z",
                "expires_at": "2026-09-25T12:00:00Z",
                "is_cancelled": false,
                "cancel_date": "2026-09-25T12:00:00Z",
                "updated_by": "string",
                "org_name": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationInviteInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "invite_status": "pending",
                  "sent_at": "2026-09-25T12:00:00Z",
                  "expires_at": "2026-09-25T12:00:00Z",
                  "is_cancelled": false,
                  "cancel_date": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "org_name": "string",
                  "id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "accepted_by": "string",
                  "accepted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Invite someone to an organization."
      }
    },
    "/v1/organization-invites/org/{org_id}": {
      "get": {
        "tags": [
          "organization-invites"
        ],
        "summary": "List an organization's pending invites",
        "description": "The organization's invites, paginated as `{data, next_cursor}`. The default page size is 20.",
        "operationId": "organization-invites.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Email"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 20, capped at 1000.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Page size; default 20, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: email, created_at, updated_at, sent_at, role, invite_status. Default: `email`.",
              "default": "email",
              "title": "Sort By"
            },
            "description": "One of: email, created_at, updated_at, sent_at, role, invite_status. Default: `email`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_OrganizationInviteInDB_"
                },
                "example": {
                  "data": [
                    {
                      "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                      "email": "invitee@example.com",
                      "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                      "designation_id": "DG0001",
                      "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                      "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "invite_status": "pending",
                      "sent_at": "2026-09-25T12:00:00Z",
                      "expires_at": "2026-09-25T12:00:00Z",
                      "is_cancelled": false,
                      "cancel_date": "2026-09-25T12:00:00Z",
                      "updated_by": "string",
                      "org_name": "string",
                      "id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "accepted_by": "string",
                      "accepted_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/organization-invites/user": {
      "get": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Invites addressed to you",
        "operationId": "organization-invites.mine",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: email, created_at, updated_at, sent_at, role, invite_status. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: email, created_at, updated_at, sent_at, role, invite_status. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_OrganizationInviteInDB_"
                },
                "example": {
                  "data": [
                    {
                      "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                      "email": "invitee@example.com",
                      "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                      "designation_id": "DG0001",
                      "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                      "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "invite_status": "pending",
                      "sent_at": "2026-09-25T12:00:00Z",
                      "expires_at": "2026-09-25T12:00:00Z",
                      "is_cancelled": false,
                      "cancel_date": "2026-09-25T12:00:00Z",
                      "updated_by": "string",
                      "org_name": "string",
                      "id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "accepted_by": "string",
                      "accepted_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ],
        "description": "Invites addressed to you."
      }
    },
    "/v1/organization-invites/{invite_id}": {
      "put": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Change a pending invite's role",
        "operationId": "organization-invites.update",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invite Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationInviteUpdate"
              },
              "example": {
                "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                "designation_id": "DG0001",
                "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                "invite_status": "pending",
                "sent_at": "2026-09-25T12:00:00Z",
                "expires_at": "2026-09-25T12:00:00Z",
                "is_cancelled": false,
                "cancel_date": "2026-09-25T12:00:00Z",
                "updated_by": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationInviteInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "invite_status": "pending",
                  "sent_at": "2026-09-25T12:00:00Z",
                  "expires_at": "2026-09-25T12:00:00Z",
                  "is_cancelled": false,
                  "cancel_date": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "org_name": "string",
                  "id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "accepted_by": "string",
                  "accepted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Change a pending invite's role."
      },
      "delete": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Revoke a pending invite",
        "operationId": "organization-invites.delete",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invite Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Revoke a pending invite."
      }
    },
    "/v1/organization-invites/{invite_id}/accept": {
      "put": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Accept an invite addressed to you",
        "operationId": "organization-invites.accept",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invite Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationInviteInDB"
                },
                "example": {
                  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
                  "email": "invitee@example.com",
                  "designation": "d1e2f3g4-5678-1234-9abc-def012345678",
                  "designation_id": "DG0001",
                  "role": "r1e2f3g4-5678-1234-9abc-def012345678",
                  "invited_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "invite_status": "pending",
                  "sent_at": "2026-09-25T12:00:00Z",
                  "expires_at": "2026-09-25T12:00:00Z",
                  "is_cancelled": false,
                  "cancel_date": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "org_name": "string",
                  "id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "accepted_by": "string",
                  "accepted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Accept an invite addressed to you."
      }
    },
    "/v1/organization-invites/{invite_id}/reject": {
      "delete": {
        "tags": [
          "organization-invites"
        ],
        "summary": "Decline an invite addressed to you",
        "operationId": "organization-invites.reject",
        "parameters": [
          {
            "name": "invite_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Invite Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Decline an invite addressed to you."
      }
    },
    "/v1/designations": {
      "get": {
        "tags": [
          "designations"
        ],
        "summary": "List designations (flat list, or the grouped catalog)",
        "description": "Without `grouped`, one flat list of designations, paginated as `{data, next_cursor}`. With `grouped=true`, the catalog grouped by category (`{org_id, groups, total}`) in a single response, not paginated.",
        "operationId": "designations.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Globals + this org's rows, with the org's hide / pin applied; omitted \u2192 globals only",
              "title": "Org Id"
            },
            "description": "Globals + this org's rows, with the org's hide / pin applied; omitted \u2192 globals only"
          },
          {
            "name": "grouped",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "`true` returns the catalog grouped by category (`{groups: [{category, items}]}`); `false` returns one flat list, each row including `name`.",
              "default": false,
              "title": "Grouped"
            },
            "description": "`true` returns the catalog grouped by category (`{groups: [{category, items}]}`); `false` returns one flat list, each row including `name`."
          },
          {
            "name": "with_usage",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Per row: members + pending invites + project members of the org pointing at it (org_id required)",
              "default": false,
              "title": "With Usage"
            },
            "description": "Per row: members + pending invites + project members of the org pointing at it (org_id required)"
          },
          {
            "name": "include_hidden",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Also return the designations hidden in this organization (flagged `hidden`).",
              "default": false,
              "title": "Include Hidden"
            },
            "description": "Also return the designations hidden in this organization (flagged `hidden`)."
          },
          {
            "name": "include_inactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Also return the organization's deactivated designations (flagged `is_active: false`), so a deactivation can be undone. Org owners and admins only.",
              "default": false,
              "title": "Include Inactive"
            },
            "description": "Also return the organization's deactivated designations (flagged `is_active: false`), so a deactivation can be undone. Org owners and admins only."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name, label, category. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: name, label, category. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/Page_Designation_"
                    },
                    {
                      "$ref": "#/components/schemas/DesignationCatalog"
                    }
                  ],
                  "title": "Response 200 List Designations Route V1 Designations Get"
                },
                "example": {
                  "data": [
                    {
                      "aliases": [
                        "SWE",
                        "SDE"
                      ],
                      "category": "Software Engineering",
                      "designation_id": "DG0001",
                      "hidden": false,
                      "is_active": true,
                      "is_system": true,
                      "label": "Software Engineer",
                      "name": "Software Engineer",
                      "pinned": false,
                      "sort_order": 1
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      },
      "post": {
        "tags": [
          "designations"
        ],
        "summary": "Create a custom designation",
        "operationId": "designations.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesignationCreate"
              },
              "example": {
                "org_id": "string",
                "label": "Delivery Lead",
                "name": "string",
                "category": "string",
                "aliases": [
                  "string"
                ],
                "sort_order": 0,
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Designation"
                },
                "example": {
                  "aliases": [
                    "SWE",
                    "SDE"
                  ],
                  "category": "Software Engineering",
                  "designation_id": "DG0001",
                  "hidden": false,
                  "is_active": true,
                  "is_system": true,
                  "label": "Software Engineer",
                  "name": "Software Engineer",
                  "pinned": false,
                  "sort_order": 1
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Create a custom designation."
      }
    },
    "/v1/designations/{designation_id}": {
      "get": {
        "tags": [
          "designations"
        ],
        "summary": "Read a designation",
        "operationId": "designations.read",
        "parameters": [
          {
            "name": "designation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Designation Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Org Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Designation"
                },
                "example": {
                  "aliases": [
                    "SWE",
                    "SDE"
                  ],
                  "category": "Software Engineering",
                  "designation_id": "DG0001",
                  "hidden": false,
                  "is_active": true,
                  "is_system": true,
                  "label": "Software Engineer",
                  "name": "Software Engineer",
                  "pinned": false,
                  "sort_order": 1
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ],
        "description": "Read a designation."
      },
      "put": {
        "tags": [
          "designations"
        ],
        "summary": "Update a designation (PUT)",
        "operationId": "designations.replace",
        "parameters": [
          {
            "name": "designation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Designation Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesignationUpdate"
              },
              "example": {
                "label": "string",
                "name": "string",
                "category": "string",
                "aliases": [
                  "string"
                ],
                "sort_order": 0,
                "is_active": false,
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Designation"
                },
                "example": {
                  "aliases": [
                    "SWE",
                    "SDE"
                  ],
                  "category": "Software Engineering",
                  "designation_id": "DG0001",
                  "hidden": false,
                  "is_active": true,
                  "is_system": true,
                  "label": "Software Engineer",
                  "name": "Software Engineer",
                  "pinned": false,
                  "sort_order": 1
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "deprecated": true,
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients."
      },
      "patch": {
        "tags": [
          "designations"
        ],
        "summary": "Update a designation",
        "operationId": "designations.update",
        "parameters": [
          {
            "name": "designation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Designation Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DesignationUpdate"
              },
              "example": {
                "label": "string",
                "name": "string",
                "category": "string",
                "aliases": [
                  "string"
                ],
                "sort_order": 0,
                "is_active": false,
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Designation"
                },
                "example": {
                  "aliases": [
                    "SWE",
                    "SDE"
                  ],
                  "category": "Software Engineering",
                  "designation_id": "DG0001",
                  "hidden": false,
                  "is_active": true,
                  "is_system": true,
                  "label": "Software Engineer",
                  "name": "Software Engineer",
                  "pinned": false,
                  "sort_order": 1
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Update a designation."
      },
      "delete": {
        "tags": [
          "designations"
        ],
        "summary": "Deactivate a custom designation",
        "operationId": "designations.delete",
        "parameters": [
          {
            "name": "designation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Designation Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DesignationDeleted"
                },
                "example": {
                  "ok": false,
                  "designation_id": "string",
                  "is_active": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Deactivate a custom designation."
      }
    },
    "/v1/designations/{designation_id}/visibility": {
      "put": {
        "tags": [
          "designations"
        ],
        "summary": "Hide / pin a designation for an org",
        "operationId": "designations.set_visibility",
        "parameters": [
          {
            "name": "designation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Designation Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VisibilityUpdate"
              },
              "example": {
                "hidden": false,
                "pinned": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DesignationVisibility"
                },
                "example": {
                  "org_id": "string",
                  "designation_id": "string",
                  "hidden": false,
                  "pinned": false,
                  "updated_by": "string",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ],
        "description": "Hide / pin a designation for an org."
      }
    },
    "/v1/project-members": {
      "post": {
        "tags": [
          "project-members"
        ],
        "summary": "Add a member to a project",
        "operationId": "project-members.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectMemberCreate"
              },
              "example": {
                "project_id": "project-1234",
                "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                "username": "john_doe",
                "designation": "developer",
                "designation_id": "DG0001",
                "role": "owner",
                "project_role": "editor",
                "created_by": "string",
                "updated_by": "string",
                "is_active": true,
                "created_at": "2026-09-25T12:00:00Z",
                "updated_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "delete_reason": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "username": "john_doe",
                  "designation": "developer",
                  "designation_id": "DG0001",
                  "role": "owner",
                  "project_role": "editor",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Add a member to a project."
      },
      "get": {
        "tags": [
          "project-members"
        ],
        "summary": "List a project's members",
        "description": "A project's members, paginated as `{data, next_cursor}`. The default page size is 20 \u2014 follow `next_cursor` (or send `limit`) for more.",
        "operationId": "project-members.list",
        "parameters": [
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project Id"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "name": "role",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Role"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 20, capped at 1000.",
              "default": 20,
              "title": "Limit"
            },
            "description": "Page size; default 20, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: updated_at, created_at, username, role. Default: `updated_at`.",
              "default": "updated_at",
              "title": "Sort By"
            },
            "description": "One of: updated_at, created_at, username, role. Default: `updated_at`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ProjectMemberInDB_"
                },
                "example": {
                  "data": [
                    {
                      "project_id": "project-1234",
                      "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "username": "john_doe",
                      "designation": "developer",
                      "designation_id": "DG0001",
                      "role": "owner",
                      "project_role": "editor",
                      "created_by": "string",
                      "updated_by": "string",
                      "is_active": true,
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "deleted_at": "2026-09-25T12:00:00Z",
                      "delete_reason": "string"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/project-members/{user_id}/{project_id}": {
      "get": {
        "tags": [
          "project-members"
        ],
        "summary": "Read one project member",
        "operationId": "project-members.read",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "username": "john_doe",
                  "designation": "developer",
                  "designation_id": "DG0001",
                  "role": "owner",
                  "project_role": "editor",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ],
        "description": "Read one project member."
      },
      "put": {
        "tags": [
          "project-members"
        ],
        "summary": "Change a project member's role (PUT)",
        "operationId": "project-members.replace",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectMemberUpdate"
              },
              "example": {
                "project_id": "project-1234",
                "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                "username": "john_doe",
                "designation": "developer",
                "designation_id": "DG0001",
                "role": "owner",
                "project_role": "editor",
                "created_by": "string",
                "updated_by": "string",
                "is_active": true,
                "created_at": "2026-09-25T12:00:00Z",
                "updated_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "delete_reason": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "username": "john_doe",
                  "designation": "developer",
                  "designation_id": "DG0001",
                  "role": "owner",
                  "project_role": "editor",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "deprecated": true,
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients."
      },
      "patch": {
        "tags": [
          "project-members"
        ],
        "summary": "Change a project member's role",
        "operationId": "project-members.update",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectMemberUpdate"
              },
              "example": {
                "project_id": "project-1234",
                "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                "username": "john_doe",
                "designation": "developer",
                "designation_id": "DG0001",
                "role": "owner",
                "project_role": "editor",
                "created_by": "string",
                "updated_by": "string",
                "is_active": true,
                "created_at": "2026-09-25T12:00:00Z",
                "updated_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "delete_reason": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "user_id": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "username": "john_doe",
                  "designation": "developer",
                  "designation_id": "DG0001",
                  "role": "owner",
                  "project_role": "editor",
                  "created_by": "string",
                  "updated_by": "string",
                  "is_active": true,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "delete_reason": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Change a project member's role."
      },
      "delete": {
        "tags": [
          "project-members"
        ],
        "summary": "Remove a project member",
        "operationId": "project-members.delete",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Remove a project member."
      }
    },
    "/v1/project-resources": {
      "post": {
        "tags": [
          "project-resources"
        ],
        "summary": "Add a link resource to a project",
        "operationId": "project-resources.create",
        "parameters": [
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectResourceCreate"
              },
              "example": {
                "project_id": "project-1234",
                "project_name": "Project 1",
                "resource_name": "API Docs",
                "resource_url": "https://example.com/api-docs.pdf",
                "resource_type": "pdf",
                "storage_path": "string",
                "is_active": true,
                "created_by": "string",
                "updated_by": "string",
                "delete_reason": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResourceInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "project_name": "Project 1",
                  "resource_name": "API Docs",
                  "resource_url": "https://example.com/api-docs.pdf",
                  "resource_type": "pdf",
                  "storage_path": "string",
                  "is_active": true,
                  "created_by": "string",
                  "updated_by": "string",
                  "delete_reason": "string",
                  "resource_id": "RE0001",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Add a link resource to a project."
      },
      "get": {
        "tags": [
          "project-resources"
        ],
        "summary": "List a project's resources",
        "description": "A project's resources, paginated as `{data, next_cursor}`.",
        "operationId": "project-resources.list",
        "parameters": [
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Resource Type"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: resource_type, resource_name, created_at, updated_at. Default: `resource_type`.",
              "default": "resource_type",
              "title": "Sort By"
            },
            "description": "One of: resource_type, resource_name, created_at, updated_at. Default: `resource_type`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ProjectResourceInDB_"
                },
                "example": {
                  "data": [
                    {
                      "project_id": "project-1234",
                      "project_name": "Project 1",
                      "resource_name": "API Docs",
                      "resource_url": "https://example.com/api-docs.pdf",
                      "resource_type": "pdf",
                      "storage_path": "string",
                      "is_active": true,
                      "created_by": "string",
                      "updated_by": "string",
                      "delete_reason": "string",
                      "resource_id": "RE0001",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "deleted_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/project-resources/{resource_id}": {
      "get": {
        "tags": [
          "project-resources"
        ],
        "summary": "Read a project resource",
        "operationId": "project-resources.read",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResourceInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "project_name": "Project 1",
                  "resource_name": "API Docs",
                  "resource_url": "https://example.com/api-docs.pdf",
                  "resource_type": "pdf",
                  "storage_path": "string",
                  "is_active": true,
                  "created_by": "string",
                  "updated_by": "string",
                  "delete_reason": "string",
                  "resource_id": "RE0001",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ],
        "description": "Read a project resource."
      },
      "put": {
        "tags": [
          "project-resources"
        ],
        "summary": "Update a project resource",
        "operationId": "project-resources.update",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectResourceUpdate"
              },
              "example": {
                "project_id": "string",
                "project_name": "string",
                "resource_name": "string",
                "resource_url": "string",
                "resource_type": "string",
                "is_active": false,
                "created_by": "string",
                "updated_by": "string",
                "delete_reason": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResourceInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "project_name": "Project 1",
                  "resource_name": "API Docs",
                  "resource_url": "https://example.com/api-docs.pdf",
                  "resource_type": "pdf",
                  "storage_path": "string",
                  "is_active": true,
                  "created_by": "string",
                  "updated_by": "string",
                  "delete_reason": "string",
                  "resource_id": "RE0001",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Update a project resource."
      },
      "delete": {
        "tags": [
          "project-resources"
        ],
        "summary": "Delete a project resource",
        "operationId": "project-resources.delete",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Delete a project resource."
      }
    },
    "/v1/project-resources/upload": {
      "post": {
        "tags": [
          "project-resources"
        ],
        "summary": "Upload a file resource (multipart)",
        "description": "Upload a file and add it to the project as a resource. The project is the `project_id` query parameter. **Deprecated:** a `project_id` form field is still accepted from older clients and ignored \u2014 the query value is used.",
        "operationId": "project-resources.upload",
        "parameters": [
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_resource_v1_project_resources_upload_post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResourceInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "project_name": "Project 1",
                  "resource_name": "API Docs",
                  "resource_url": "https://example.com/api-docs.pdf",
                  "resource_type": "pdf",
                  "storage_path": "string",
                  "is_active": true,
                  "created_by": "string",
                  "updated_by": "string",
                  "delete_reason": "string",
                  "resource_id": "RE0001",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/task-attachments": {
      "post": {
        "tags": [
          "task-attachments"
        ],
        "summary": "Upload an attachment to a task (multipart)",
        "description": "Upload a file to storage and create an attachment row.\nEnforces per-task limit.",
        "operationId": "task-attachments.create",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_attachment_v1_task_attachments_post"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskAttachmentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "title": "Design Doc",
                  "name": "design.pdf",
                  "url": "https://example.com/design.pdf",
                  "uploaded_by": "string",
                  "uploaded_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "deleted_by": "string",
                  "is_inline": false,
                  "attachment_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "get": {
        "tags": [
          "task-attachments"
        ],
        "summary": "List a task's attachments",
        "description": "A task's attachments, paginated as `{data, next_cursor}`.",
        "operationId": "task-attachments.list",
        "parameters": [
          {
            "name": "task_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: uploaded_at, name, title. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: uploaded_at, name, title. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TaskAttachmentInDB_"
                },
                "example": {
                  "data": [
                    {
                      "task_id": "task-1234",
                      "title": "Design Doc",
                      "name": "design.pdf",
                      "url": "https://example.com/design.pdf",
                      "uploaded_by": "string",
                      "uploaded_at": "2026-09-25T12:00:00Z",
                      "deleted_at": "2026-09-25T12:00:00Z",
                      "deleted_by": "string",
                      "is_inline": false,
                      "attachment_id": "string"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/task-attachments/{attachment_id}": {
      "get": {
        "tags": [
          "task-attachments"
        ],
        "summary": "Read an attachment's metadata",
        "operationId": "task-attachments.read",
        "parameters": [
          {
            "name": "attachment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Attachment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskAttachmentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "title": "Design Doc",
                  "name": "design.pdf",
                  "url": "https://example.com/design.pdf",
                  "uploaded_by": "string",
                  "uploaded_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "deleted_by": "string",
                  "is_inline": false,
                  "attachment_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:read"
        ],
        "description": "Read an attachment's metadata."
      },
      "put": {
        "tags": [
          "task-attachments"
        ],
        "summary": "Rename an attachment",
        "operationId": "task-attachments.update",
        "parameters": [
          {
            "name": "attachment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Attachment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskAttachmentUpdate"
              },
              "example": {
                "task_id": "task-1234",
                "title": "Design Doc",
                "name": "design.pdf",
                "url": "https://example.com/design.pdf",
                "uploaded_by": "string",
                "uploaded_at": "2026-09-25T12:00:00Z",
                "deleted_at": "2026-09-25T12:00:00Z",
                "deleted_by": "string",
                "is_inline": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskAttachmentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "title": "Design Doc",
                  "name": "design.pdf",
                  "url": "https://example.com/design.pdf",
                  "uploaded_by": "string",
                  "uploaded_at": "2026-09-25T12:00:00Z",
                  "deleted_at": "2026-09-25T12:00:00Z",
                  "deleted_by": "string",
                  "is_inline": false,
                  "attachment_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "description": "Rename an attachment."
      },
      "delete": {
        "tags": [
          "task-attachments"
        ],
        "summary": "Delete an attachment",
        "operationId": "task-attachments.delete",
        "parameters": [
          {
            "name": "attachment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Attachment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "description": "Delete an attachment."
      }
    },
    "/v1/task-comments": {
      "post": {
        "tags": [
          "task-comments"
        ],
        "summary": "Comment on a task",
        "description": "Create a new top-level comment on a task.",
        "operationId": "task-comments.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskCommentCreate"
              },
              "example": {
                "task_id": "task-1234",
                "task_title": "Implement Login",
                "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                "comment": "string",
                "content": "Looks good, but needs more tests.",
                "parent_comment_id": "string",
                "created_at": "2026-09-25T12:00:00Z",
                "updated_at": "2026-09-25T12:00:00Z",
                "mentions": [
                  {
                    "user_id": "string",
                    "username": "string",
                    "email": "string"
                  }
                ],
                "org_id": "string"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCommentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "task_title": "Implement Login",
                  "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "comment": "string",
                  "content": "Looks good, but needs more tests.",
                  "parent_comment_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "mentions": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "email": "string"
                    }
                  ],
                  "org_id": "string",
                  "comment_id": "string",
                  "replies": []
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "create",
        "x-scopes": [
          "tasks:write"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Replay the first response for 24 h when the same request is retried with this key."
          }
        ]
      },
      "get": {
        "tags": [
          "task-comments"
        ],
        "summary": "List a task's comments (threaded)",
        "description": "A task's comments with their replies, paginated as `{data, next_cursor}`. Each comment may carry a `replies` array of its direct replies; a page is a page of top-level comments.",
        "operationId": "task-comments.list",
        "parameters": [
          {
            "name": "task_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Search term to filter comments",
              "title": "Search"
            },
            "description": "Search term to filter comments"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at, updated_at. Default: `created_at`.",
              "default": "created_at",
              "title": "Sort By"
            },
            "description": "One of: created_at, updated_at. Default: `created_at`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TaskCommentInDB_"
                },
                "example": {
                  "data": [
                    {
                      "task_id": "task-1234",
                      "task_title": "Implement Login",
                      "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                      "comment": "string",
                      "content": "Looks good, but needs more tests.",
                      "parent_comment_id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "mentions": [
                        {
                          "user_id": "string",
                          "username": "string",
                          "email": "string"
                        }
                      ],
                      "org_id": "string",
                      "comment_id": "string",
                      "replies": []
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/task-comments/reply": {
      "post": {
        "tags": [
          "task-comments"
        ],
        "summary": "Reply to a comment",
        "description": "Reply to an existing comment.",
        "operationId": "task-comments.reply",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplyCreate"
              },
              "example": {
                "content": "string",
                "parent_comment_id": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCommentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "task_title": "Implement Login",
                  "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "comment": "string",
                  "content": "Looks good, but needs more tests.",
                  "parent_comment_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "mentions": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "email": "string"
                    }
                  ],
                  "org_id": "string",
                  "comment_id": "string",
                  "replies": []
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "create",
        "x-scopes": [
          "tasks:write"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Replay the first response for 24 h when the same request is retried with this key."
          }
        ]
      }
    },
    "/v1/task-comments/{comment_id}": {
      "get": {
        "tags": [
          "task-comments"
        ],
        "summary": "Read a comment",
        "operationId": "task-comments.read",
        "parameters": [
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Comment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCommentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "task_title": "Implement Login",
                  "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "comment": "string",
                  "content": "Looks good, but needs more tests.",
                  "parent_comment_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "mentions": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "email": "string"
                    }
                  ],
                  "org_id": "string",
                  "comment_id": "string",
                  "replies": []
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:read"
        ],
        "description": "Read a comment."
      },
      "put": {
        "tags": [
          "task-comments"
        ],
        "summary": "Edit your comment",
        "operationId": "task-comments.update",
        "parameters": [
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Comment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskCommentUpdate"
              },
              "example": {
                "task_id": "string",
                "task_title": "string",
                "created_by": "string",
                "comment": "string",
                "content": "string",
                "created_at": "2026-09-25T12:00:00Z",
                "updated_at": "2026-09-25T12:00:00Z",
                "org_id": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskCommentInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "task_title": "Implement Login",
                  "created_by": "b3c1e2d4-1234-5678-9abc-def012345678",
                  "comment": "string",
                  "content": "Looks good, but needs more tests.",
                  "parent_comment_id": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "mentions": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "email": "string"
                    }
                  ],
                  "org_id": "string",
                  "comment_id": "string",
                  "replies": []
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "description": "Edit your comment."
      },
      "delete": {
        "tags": [
          "task-comments"
        ],
        "summary": "Delete a comment",
        "operationId": "task-comments.delete",
        "parameters": [
          {
            "name": "comment_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Comment Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "description": "Delete a comment."
      }
    },
    "/v1/task-history": {
      "get": {
        "tags": [
          "task-history"
        ],
        "summary": "A task's change history",
        "description": "A task's change history, paginated as `{data, next_cursor}`. Send `sort_by=created_at` to order it by time.",
        "operationId": "task-history.list",
        "parameters": [
          {
            "name": "task_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "title",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional task title to disambiguate sequential reuse of task_id",
              "title": "Title"
            },
            "description": "Optional task title to disambiguate sequential reuse of task_id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TaskHistoryInDB_"
                },
                "example": {
                  "data": [
                    {
                      "task_id": "task-1234",
                      "title": "Initial Version",
                      "metadata": [
                        {
                          "field": "status",
                          "new": "in_progress",
                          "old": "not_started"
                        }
                      ],
                      "hash_id": "abc123hash",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "history_id": "string",
                      "action": "created",
                      "created_by": "user-1234",
                      "created_at": "2023-10-01T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/task-history/{history_id}": {
      "get": {
        "tags": [
          "task-history"
        ],
        "summary": "Read one history entry",
        "operationId": "task-history.read",
        "parameters": [
          {
            "name": "history_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "History Id"
            }
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "deprecated": true,
              "title": "Project Id"
            },
            "deprecated": true
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskHistoryInDB"
                },
                "example": {
                  "task_id": "task-1234",
                  "title": "Initial Version",
                  "metadata": [
                    {
                      "field": "status",
                      "new": "in_progress",
                      "old": "not_started"
                    }
                  ],
                  "hash_id": "abc123hash",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "history_id": "string",
                  "action": "created",
                  "created_by": "user-1234",
                  "created_at": "2023-10-01T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:read"
        ],
        "description": "Read one history entry."
      }
    },
    "/v1/project-stats/{project_id}/stats": {
      "get": {
        "tags": [
          "project-stats"
        ],
        "summary": "A project's task statistics",
        "description": "Get statistics for a specific project",
        "operationId": "project-stats.read",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStatsInDB"
                },
                "example": {
                  "project_id": "project-1234",
                  "tasks_total": 25,
                  "tasks_completed": 15,
                  "progress_percent": 60.0,
                  "team_members": 5,
                  "days_left": 30,
                  "duration_days": 120,
                  "bugs_total": 5
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/organizations/{org_id}/settings": {
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "Read an organization's settings",
        "description": "The org's settings; the defaults (`is_default: true`) when none were saved yet.",
        "operationId": "organizations.settings",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization ID",
              "title": "Org Id"
            },
            "description": "Organization ID"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationSettingsOut"
                },
                "example": {
                  "org_id": "string",
                  "default_visibility": "public",
                  "domain_join_mode": "approval",
                  "audit_retention_days": 0,
                  "allow_personal_tokens": true,
                  "max_token_ttl_days": 0,
                  "require_token_expiry": false,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "is_default": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ]
      },
      "put": {
        "tags": [
          "organizations"
        ],
        "summary": "Update an organization's settings",
        "description": "Upsert the org's settings. Owners and admins only.",
        "operationId": "organizations.update_settings",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization ID",
              "title": "Org Id"
            },
            "description": "Organization ID"
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrganizationSettingsUpdate"
              },
              "example": {
                "default_visibility": "public",
                "domain_join_mode": "instant",
                "audit_retention_days": 1,
                "allow_personal_tokens": false,
                "max_token_ttl_days": 1,
                "require_token_expiry": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationSettingsOut"
                },
                "example": {
                  "org_id": "string",
                  "default_visibility": "public",
                  "domain_join_mode": "approval",
                  "audit_retention_days": 0,
                  "allow_personal_tokens": true,
                  "max_token_ttl_days": 0,
                  "require_token_expiry": false,
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "updated_by": "string",
                  "is_default": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      }
    },
    "/v1/organizations/{org_id}/service-accounts": {
      "post": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Create a service account (owner / admin)",
        "description": "Create a service account: a non-human member of the organization (role `member`) that cannot sign in. Mint its tokens with `POST /v1/tokens`, setting `principal_user_id` to its id. Org owners and admins only.",
        "operationId": "service-accounts.create",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceAccountCreate"
              },
              "example": {
                "name": "CI bot",
                "designation": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountOut"
                },
                "example": {
                  "active_tokens": 1,
                  "created_at": "2026-09-25T12:00:00Z",
                  "email": "ci-bot@service.o0020.tasksmate.invalid",
                  "is_active": true,
                  "kind": "service_account",
                  "name": "CI bot",
                  "org_id": "O0020",
                  "role": "member",
                  "user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "username": "sa-ci-bot"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      },
      "get": {
        "tags": [
          "service-accounts"
        ],
        "summary": "List an organization's service accounts (owner / admin)",
        "description": "The organization's service accounts \u2014 active and deactivated \u2014 with how many tokens each holds right now.",
        "operationId": "service-accounts.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name, username, created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: name, username, created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ServiceAccountOut_"
                },
                "example": {
                  "data": [
                    {
                      "active_tokens": 1,
                      "created_at": "2026-09-25T12:00:00Z",
                      "email": "ci-bot@service.o0020.tasksmate.invalid",
                      "is_active": true,
                      "kind": "service_account",
                      "name": "CI bot",
                      "org_id": "O0020",
                      "role": "member",
                      "user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                      "username": "sa-ci-bot"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/organizations/{org_id}/service-accounts/{user_id}": {
      "patch": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Rename a service account",
        "description": "Rename (its display name; the username never changes).",
        "operationId": "service-accounts.update",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceAccountUpdate"
              },
              "example": {
                "name": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountOut"
                },
                "example": {
                  "active_tokens": 1,
                  "created_at": "2026-09-25T12:00:00Z",
                  "email": "ci-bot@service.o0020.tasksmate.invalid",
                  "is_active": true,
                  "kind": "service_account",
                  "name": "CI bot",
                  "org_id": "O0020",
                  "role": "member",
                  "user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "username": "sa-ci-bot"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      },
      "delete": {
        "tags": [
          "service-accounts"
        ],
        "summary": "Deactivate a service account and revoke its tokens (never a hard delete)",
        "description": "Deactivate: the membership goes inactive and every token it holds is revoked (`service_account_deactivated`).\nNever a hard delete \u2014 its audit history and the tasks that name it stay intact.",
        "operationId": "service-accounts.delete",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceAccountOut"
                },
                "example": {
                  "active_tokens": 1,
                  "created_at": "2026-09-25T12:00:00Z",
                  "email": "ci-bot@service.o0020.tasksmate.invalid",
                  "is_active": true,
                  "kind": "service_account",
                  "name": "CI bot",
                  "org_id": "O0020",
                  "role": "member",
                  "user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "username": "sa-ci-bot"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      }
    },
    "/v1/organizations/{org_id}/access-review": {
      "get": {
        "tags": [
          "organizations"
        ],
        "summary": "Access review: every member and the tokens they hold (owner / admin; JSON or CSV)",
        "description": "Who can reach this organization, and with which tokens. Owner / admin. `Accept: text/csv` for a spreadsheet.",
        "operationId": "organizations.access_review",
        "parameters": [
          {
            "name": "org_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessReview"
                },
                "example": {
                  "org_id": "string",
                  "generated_at": "string",
                  "members": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "email": "string",
                      "kind": "string",
                      "role": "string",
                      "designation": "string",
                      "last_active_at": "string",
                      "tokens": [
                        {
                          "token_id": "string",
                          "name": "string",
                          "token_prefix": "string",
                          "kind": "string",
                          "grant_type": "string",
                          "scopes": [
                            "string"
                          ],
                          "project_ids": [
                            "string"
                          ],
                          "expires_at": "string",
                          "last_used_at": "string"
                        }
                      ]
                    }
                  ],
                  "unattached_tokens": [
                    {
                      "token_id": "string",
                      "name": "string",
                      "token_prefix": "string",
                      "kind": "string",
                      "grant_type": "string",
                      "scopes": [
                        "string"
                      ],
                      "project_ids": [
                        "string"
                      ],
                      "expires_at": "string",
                      "last_used_at": "string",
                      "principal_user_id": "string"
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                },
                "example": "user_id,username,email,kind,role,designation,last_active_at,token_id,token_name,token_prefix,token_kind,grant_type,scopes,project_ids,expires_at,last_used_at\n"
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/tokens": {
      "post": {
        "tags": [
          "tokens"
        ],
        "summary": "Mint an access token (the token is shown once)",
        "description": "Mint a token. The response's `token` is the only time it is ever shown \u2014 store it now. Yourself by default;\n`principal_user_id` = a service account of the org (owner / admin). The org's policy applies (personal tokens\nallowed? expiry required? maximum lifetime?).",
        "operationId": "tokens.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TokenCreate"
              },
              "example": {
                "org_id": "string",
                "name": "CI deploys",
                "kind": "live",
                "scopes": [
                  "tasks:write",
                  "projects:read"
                ],
                "project_ids": [
                  "string"
                ],
                "expires_at": "2026-09-25T12:00:00Z",
                "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenCreated"
                },
                "example": {
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "expires_at": "2026-12-31T00:00:00Z",
                  "grant_type": "personal",
                  "kind": "live",
                  "name": "CI deploys",
                  "org_id": "O0020",
                  "principal_display": "ada",
                  "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "scopes": [
                    "tasks:write"
                  ],
                  "status": "active",
                  "token": "tm_live_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
                  "token_id": "TK123456",
                  "token_prefix": "tm_live_Ab3x",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "use_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      },
      "get": {
        "tags": [
          "tokens"
        ],
        "summary": "Your access tokens (an owner / admin: the organization's)",
        "description": "Your tokens in the organization, newest first; an owner / admin sees every token of the organization\n(`filter[principal_user_id]`, `filter[status]=active|revoked|expired`). Never the token or its hash.",
        "operationId": "tokens.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The organization",
              "title": "Org Id"
            },
            "description": "The organization"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[principal_user_id]`, `filter[status]`, `filter[kind]`, `filter[grant_type]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[principal_user_id]`, `filter[status]`, `filter[kind]`, `filter[grant_type]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at, name, last_used_at, expires_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: created_at, name, last_used_at, expires_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TokenOut_"
                },
                "example": {
                  "data": [
                    {
                      "created_at": "2026-09-25T12:00:00Z",
                      "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                      "expires_at": "2026-12-31T00:00:00Z",
                      "grant_type": "personal",
                      "kind": "live",
                      "name": "CI deploys",
                      "org_id": "O0020",
                      "principal_display": "ada",
                      "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                      "scopes": [
                        "tasks:write"
                      ],
                      "status": "active",
                      "token_id": "TK123456",
                      "token_prefix": "tm_live_Ab3x",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "use_count": 0
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "org:read"
        ]
      }
    },
    "/v1/tokens/{token_id}": {
      "get": {
        "tags": [
          "tokens"
        ],
        "summary": "Read an access token (never the token itself)",
        "operationId": "tokens.read",
        "parameters": [
          {
            "name": "token_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenOut"
                },
                "example": {
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "expires_at": "2026-12-31T00:00:00Z",
                  "grant_type": "personal",
                  "kind": "live",
                  "name": "CI deploys",
                  "org_id": "O0020",
                  "principal_display": "ada",
                  "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "scopes": [
                    "tasks:write"
                  ],
                  "status": "active",
                  "token_id": "TK123456",
                  "token_prefix": "tm_live_Ab3x",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "use_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:read"
        ],
        "description": "Read an access token (never the token itself)."
      },
      "patch": {
        "tags": [
          "tokens"
        ],
        "summary": "Rename an access token",
        "description": "Rename. Nothing else about a token changes \u2014 rotate it or revoke it.",
        "operationId": "tokens.update",
        "parameters": [
          {
            "name": "token_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TokenUpdate"
              },
              "example": {
                "name": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenOut"
                },
                "example": {
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "expires_at": "2026-12-31T00:00:00Z",
                  "grant_type": "personal",
                  "kind": "live",
                  "name": "CI deploys",
                  "org_id": "O0020",
                  "principal_display": "ada",
                  "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "scopes": [
                    "tasks:write"
                  ],
                  "status": "active",
                  "token_id": "TK123456",
                  "token_prefix": "tm_live_Ab3x",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "use_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      },
      "delete": {
        "tags": [
          "tokens"
        ],
        "summary": "Revoke an access token (effective on the next request)",
        "description": "Revoke (soft; the row stays for the audit trail). Effective on the next request.",
        "operationId": "tokens.delete",
        "parameters": [
          {
            "name": "token_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenOut"
                },
                "example": {
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "expires_at": "2026-12-31T00:00:00Z",
                  "grant_type": "personal",
                  "kind": "live",
                  "name": "CI deploys",
                  "org_id": "O0020",
                  "principal_display": "ada",
                  "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "scopes": [
                    "tasks:write"
                  ],
                  "status": "active",
                  "token_id": "TK123456",
                  "token_prefix": "tm_live_Ab3x",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "use_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      }
    },
    "/v1/tokens/{token_id}/rotate": {
      "post": {
        "tags": [
          "tokens"
        ],
        "summary": "Rotate: a new token with the same grant; the old one works 60 s more",
        "description": "A new token with the same grant (principal, scopes, projects, expiry, kind); the old one keeps working for 60\nseconds, then is revoked (`rotated`). The response's `token` is shown once.",
        "operationId": "tokens.rotate",
        "parameters": [
          {
            "name": "token_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Token Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenCreated"
                },
                "example": {
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "expires_at": "2026-12-31T00:00:00Z",
                  "grant_type": "personal",
                  "kind": "live",
                  "name": "CI deploys",
                  "org_id": "O0020",
                  "principal_display": "ada",
                  "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "scopes": [
                    "tasks:write"
                  ],
                  "status": "active",
                  "token": "tm_live_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
                  "token_id": "TK123456",
                  "token_prefix": "tm_live_Ab3x",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "use_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "org:write"
        ]
      }
    },
    "/v1/webhooks/events": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "The event vocabulary a webhook can subscribe to",
        "description": "The event vocabulary a webhook can subscribe to, grouped by resource, each group led by its `<resource>.*`\nwildcard. The same names as the audit log's `action`.",
        "operationId": "webhooks.events",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[resource]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[resource]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "This list has one fixed order. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "This list has one fixed order. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WebhookEventType_"
                },
                "example": {
                  "data": [
                    {
                      "type": "string",
                      "resource": "string",
                      "description": "string",
                      "wildcard": false
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": []
      }
    },
    "/v1/webhooks": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Create a webhook (the signing secret is shown once)",
        "description": "Register an HTTPS endpoint for a set of events. The response's `secret` is the only time it is ever shown \u2014\nstore it now. Deliveries are signed Standard-Webhooks style (`webhook-id`, `webhook-timestamp`,\n`webhook-signature`). Events of private projects are included.",
        "operationId": "webhooks.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreate"
              },
              "example": {
                "org_id": "string",
                "name": "Deploy notifier",
                "url": "https://hooks.example.com/tasksmate",
                "events": [
                  "task.*",
                  "project.created"
                ],
                "project_ids": [
                  "string"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreated"
                },
                "example": {
                  "api_version": "2026-09-25",
                  "consecutive_failures": 0,
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "events": [
                    "task.*"
                  ],
                  "key_version": 1,
                  "name": "Deploy notifier",
                  "org_id": "O0020",
                  "secret": "whsec_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da0Bq0RU=",
                  "secret_prefix": "whsec_Ab3xQ9",
                  "status": "active",
                  "subscription_id": "WH123456",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "url": "https://hooks.example.com/tasksmate"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      },
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "An organization's webhooks (owner / admin)",
        "description": "The organization's webhooks, newest first (`filter[status]=active|paused|disabled`). Never the secret.",
        "operationId": "webhooks.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The organization",
              "title": "Org Id"
            },
            "description": "The organization"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at, name, last_delivery_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: created_at, name, last_delivery_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_WebhookOut_"
                },
                "example": {
                  "data": [
                    {
                      "api_version": "2026-09-25",
                      "consecutive_failures": 0,
                      "created_at": "2026-09-25T12:00:00Z",
                      "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                      "events": [
                        "task.*"
                      ],
                      "key_version": 1,
                      "name": "Deploy notifier",
                      "org_id": "O0020",
                      "secret_prefix": "whsec_Ab3xQ9",
                      "status": "active",
                      "subscription_id": "WH123456",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "url": "https://hooks.example.com/tasksmate"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "webhooks:read"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "Read a webhook (never its secret)",
        "operationId": "webhooks.read",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookOut"
                },
                "example": {
                  "api_version": "2026-09-25",
                  "consecutive_failures": 0,
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "events": [
                    "task.*"
                  ],
                  "key_version": 1,
                  "name": "Deploy notifier",
                  "org_id": "O0020",
                  "secret_prefix": "whsec_Ab3xQ9",
                  "status": "active",
                  "subscription_id": "WH123456",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "url": "https://hooks.example.com/tasksmate"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:read"
        ],
        "description": "Read a webhook (never its secret)."
      },
      "patch": {
        "tags": [
          "webhooks"
        ],
        "summary": "Change, pause, resume or re-enable a webhook",
        "description": "Change the name, URL, events or projects; pause (`status: paused`) or resume (`active`). A webhook DISABLED after\nrepeated failures is re-enabled with `status: active`, which resets its failure count.",
        "operationId": "webhooks.update",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdate"
              },
              "example": {
                "name": "string",
                "url": "stringxx",
                "events": [
                  "string"
                ],
                "project_ids": [
                  "string"
                ],
                "status": "active"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookOut"
                },
                "example": {
                  "api_version": "2026-09-25",
                  "consecutive_failures": 0,
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "events": [
                    "task.*"
                  ],
                  "key_version": 1,
                  "name": "Deploy notifier",
                  "org_id": "O0020",
                  "secret_prefix": "whsec_Ab3xQ9",
                  "status": "active",
                  "subscription_id": "WH123456",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "url": "https://hooks.example.com/tasksmate"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      },
      "delete": {
        "tags": [
          "webhooks"
        ],
        "summary": "Delete a webhook",
        "description": "Delete (soft): nothing more is delivered and queued deliveries are dropped.",
        "operationId": "webhooks.delete",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookOut"
                },
                "example": {
                  "api_version": "2026-09-25",
                  "consecutive_failures": 0,
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "events": [
                    "task.*"
                  ],
                  "key_version": 1,
                  "name": "Deploy notifier",
                  "org_id": "O0020",
                  "secret_prefix": "whsec_Ab3xQ9",
                  "status": "active",
                  "subscription_id": "WH123456",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "url": "https://hooks.example.com/tasksmate"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}/rotate-secret": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Rotate the signing secret; the old one signs too for 24 h",
        "description": "A new signing secret (shown once). The old one keeps signing for 24 hours: deliveries carry both signatures.",
        "operationId": "webhooks.rotate_secret",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreated"
                },
                "example": {
                  "api_version": "2026-09-25",
                  "consecutive_failures": 0,
                  "created_at": "2026-09-25T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "events": [
                    "task.*"
                  ],
                  "key_version": 1,
                  "name": "Deploy notifier",
                  "org_id": "O0020",
                  "secret": "whsec_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da0Bq0RU=",
                  "secret_prefix": "whsec_Ab3xQ9",
                  "status": "active",
                  "subscription_id": "WH123456",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "url": "https://hooks.example.com/tasksmate"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}/test": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Send a test delivery now and return the endpoint's response",
        "description": "Send a synthetic `webhook.test` delivery NOW and return it with the endpoint's response (one attempt, no retry;\nworks on a paused or disabled webhook). 6 a minute per webhook.",
        "operationId": "webhooks.test",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryDetail"
                },
                "example": {
                  "delivery_id": "string",
                  "subscription_id": "string",
                  "org_id": "string",
                  "event_id": 0,
                  "event_type": "string",
                  "attempt": 0,
                  "max_attempts": 0,
                  "status": "pending",
                  "next_attempt_at": "2026-09-25T12:00:00Z",
                  "response_status": 0,
                  "response_ms": 0,
                  "error": "string",
                  "resolved_ip": "string",
                  "replay_of": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "finished_at": "2026-09-25T12:00:00Z",
                  "payload": {},
                  "request_headers": {},
                  "response_excerpt": "string",
                  "attempt_log": [
                    {}
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}/deliveries": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "A webhook's delivery log",
        "description": "The delivery log, newest first (`filter[status]`, `filter[event_type]`). Kept 30 days.",
        "operationId": "webhooks.deliveries",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 50, capped at 1000. Filters: `filter[status]`, `filter[event_type]` (comma-separated values are OR-ed).",
              "default": 50,
              "title": "Limit"
            },
            "description": "Page size; default 50, capped at 1000. Filters: `filter[status]`, `filter[event_type]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "This list has one fixed order. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "This list has one fixed order. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_DeliveryOut_"
                },
                "example": {
                  "data": [
                    {
                      "delivery_id": "string",
                      "subscription_id": "string",
                      "org_id": "string",
                      "event_id": 0,
                      "event_type": "string",
                      "attempt": 0,
                      "max_attempts": 0,
                      "status": "pending",
                      "next_attempt_at": "2026-09-25T12:00:00Z",
                      "response_status": 0,
                      "response_ms": 0,
                      "error": "string",
                      "resolved_ip": "string",
                      "replay_of": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "finished_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "webhooks:read"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}/deliveries/{delivery_id}": {
      "get": {
        "tags": [
          "webhooks"
        ],
        "summary": "One delivery: body, headers, response, attempts",
        "description": "One delivery: the body as sent, the request headers (the signature masked), the response excerpt, every attempt.",
        "operationId": "webhooks.delivery",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "delivery_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Delivery Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryDetail"
                },
                "example": {
                  "delivery_id": "string",
                  "subscription_id": "string",
                  "org_id": "string",
                  "event_id": 0,
                  "event_type": "string",
                  "attempt": 0,
                  "max_attempts": 0,
                  "status": "pending",
                  "next_attempt_at": "2026-09-25T12:00:00Z",
                  "response_status": 0,
                  "response_ms": 0,
                  "error": "string",
                  "resolved_ip": "string",
                  "replay_of": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "finished_at": "2026-09-25T12:00:00Z",
                  "payload": {},
                  "request_headers": {},
                  "response_excerpt": "string",
                  "attempt_log": [
                    {}
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:read"
        ]
      }
    },
    "/v1/webhooks/{subscription_id}/deliveries/{delivery_id}/replay": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "summary": "Send a delivery again as a new delivery",
        "description": "Send the same body again as a NEW delivery (`replay_of` = this one), on the normal retry schedule. 6 a minute\nper webhook.",
        "operationId": "webhooks.replay",
        "parameters": [
          {
            "name": "subscription_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Subscription Id"
            }
          },
          {
            "name": "delivery_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Delivery Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryOut"
                },
                "example": {
                  "delivery_id": "string",
                  "subscription_id": "string",
                  "org_id": "string",
                  "event_id": 0,
                  "event_type": "string",
                  "attempt": 0,
                  "max_attempts": 0,
                  "status": "pending",
                  "next_attempt_at": "2026-09-25T12:00:00Z",
                  "response_status": 0,
                  "response_ms": 0,
                  "error": "string",
                  "resolved_ip": "string",
                  "replay_of": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "finished_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "webhooks:write"
        ]
      }
    },
    "/v1/oauth/clients": {
      "get": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "An organization's OAuth apps (owner / admin)",
        "description": "The organization's OAuth apps, newest first (owner / admin), with how many people are connected to each.\nNever a secret.",
        "operationId": "oauth-clients.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The organization",
              "title": "Org Id"
            },
            "description": "The organization"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]`, `filter[client_type]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[status]`, `filter[client_type]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at, name, last_used_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: created_at, name, last_used_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_OAuthClientOut_"
                },
                "example": {
                  "data": [
                    {
                      "allowed_scopes": [
                        "tasks:write",
                        "projects:read"
                      ],
                      "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                      "client_type": "confidential",
                      "created_at": "2026-09-26T12:00:00Z",
                      "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                      "grants_count": 3,
                      "homepage_url": "https://hr.example.com",
                      "last_used_at": "2026-09-26T12:00:00Z",
                      "name": "Acme HR",
                      "org_id": "O0020",
                      "redirect_uris": [
                        "https://hr.example.com/oauth/callback"
                      ],
                      "registration": "developer",
                      "review_state": "private",
                      "status": "active",
                      "updated_at": "2026-09-26T12:00:00Z",
                      "use_count": 1204
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "admin"
        ]
      },
      "post": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "Register an OAuth app (a confidential app's secret is shown once)",
        "description": "Register an app (owner / admin). A confidential app's `client_secret` is in this response only \u2014 store it now.",
        "operationId": "oauth-clients.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OAuthClientCreate"
              },
              "example": {
                "org_id": "string",
                "name": "Acme HR",
                "client_type": "confidential",
                "redirect_uris": [
                  "https://hr.example.com/oauth/callback"
                ],
                "allowed_scopes": [
                  "tasks:write",
                  "projects:read"
                ],
                "logo_url": "string",
                "homepage_url": "string",
                "privacy_url": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthClientCreated"
                },
                "example": {
                  "allowed_scopes": [
                    "tasks:write",
                    "projects:read"
                  ],
                  "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                  "client_secret": "tmcs_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
                  "client_type": "confidential",
                  "created_at": "2026-09-26T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "grants_count": 3,
                  "homepage_url": "https://hr.example.com",
                  "last_used_at": "2026-09-26T12:00:00Z",
                  "name": "Acme HR",
                  "org_id": "O0020",
                  "redirect_uris": [
                    "https://hr.example.com/oauth/callback"
                  ],
                  "registration": "developer",
                  "review_state": "private",
                  "status": "active",
                  "updated_at": "2026-09-26T12:00:00Z",
                  "use_count": 1204
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/oauth/clients/{client_id}": {
      "get": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "Read an OAuth app (never its secret)",
        "description": "One app (owner / admin of the organization that registered it). Never its secret.",
        "operationId": "oauth-clients.read",
        "parameters": [
          {
            "name": "client_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Client Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthClientOut"
                },
                "example": {
                  "allowed_scopes": [
                    "tasks:write",
                    "projects:read"
                  ],
                  "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                  "client_type": "confidential",
                  "created_at": "2026-09-26T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "grants_count": 3,
                  "homepage_url": "https://hr.example.com",
                  "last_used_at": "2026-09-26T12:00:00Z",
                  "name": "Acme HR",
                  "org_id": "O0020",
                  "redirect_uris": [
                    "https://hr.example.com/oauth/callback"
                  ],
                  "registration": "developer",
                  "review_state": "private",
                  "status": "active",
                  "updated_at": "2026-09-26T12:00:00Z",
                  "use_count": 1204
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      },
      "patch": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "Change an OAuth app's name, links, redirect URIs or scopes",
        "description": "Change the name, links, redirect URIs or allowed scopes. The client type never changes.",
        "operationId": "oauth-clients.update",
        "parameters": [
          {
            "name": "client_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Client Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OAuthClientUpdate"
              },
              "example": {
                "name": "string",
                "redirect_uris": [
                  "string"
                ],
                "allowed_scopes": [
                  "string"
                ],
                "logo_url": "string",
                "homepage_url": "string",
                "privacy_url": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthClientOut"
                },
                "example": {
                  "allowed_scopes": [
                    "tasks:write",
                    "projects:read"
                  ],
                  "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                  "client_type": "confidential",
                  "created_at": "2026-09-26T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "grants_count": 3,
                  "homepage_url": "https://hr.example.com",
                  "last_used_at": "2026-09-26T12:00:00Z",
                  "name": "Acme HR",
                  "org_id": "O0020",
                  "redirect_uris": [
                    "https://hr.example.com/oauth/callback"
                  ],
                  "registration": "developer",
                  "review_state": "private",
                  "status": "active",
                  "updated_at": "2026-09-26T12:00:00Z",
                  "use_count": 1204
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      },
      "delete": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "Revoke an OAuth app, every connection to it and its tokens",
        "description": "Revoke the app: it stops authenticating, and every connection to it and every token it holds is revoked. The\nrecord stays for the audit trail.",
        "operationId": "oauth-clients.delete",
        "parameters": [
          {
            "name": "client_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Client Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthClientOut"
                },
                "example": {
                  "allowed_scopes": [
                    "tasks:write",
                    "projects:read"
                  ],
                  "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                  "client_type": "confidential",
                  "created_at": "2026-09-26T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "grants_count": 3,
                  "homepage_url": "https://hr.example.com",
                  "last_used_at": "2026-09-26T12:00:00Z",
                  "name": "Acme HR",
                  "org_id": "O0020",
                  "redirect_uris": [
                    "https://hr.example.com/oauth/callback"
                  ],
                  "registration": "developer",
                  "review_state": "private",
                  "status": "active",
                  "updated_at": "2026-09-26T12:00:00Z",
                  "use_count": 1204
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/oauth/clients/{client_id}/rotate-secret": {
      "post": {
        "tags": [
          "oauth-clients"
        ],
        "summary": "Rotate an app's secret (shown once; the old one works 24 h more)",
        "description": "A new secret, shown once in this response. The old one keeps working for 24 hours.",
        "operationId": "oauth-clients.rotate_secret",
        "parameters": [
          {
            "name": "client_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Client Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthClientCreated"
                },
                "example": {
                  "allowed_scopes": [
                    "tasks:write",
                    "projects:read"
                  ],
                  "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                  "client_secret": "tmcs_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
                  "client_type": "confidential",
                  "created_at": "2026-09-26T12:00:00Z",
                  "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
                  "grants_count": 3,
                  "homepage_url": "https://hr.example.com",
                  "last_used_at": "2026-09-26T12:00:00Z",
                  "name": "Acme HR",
                  "org_id": "O0020",
                  "redirect_uris": [
                    "https://hr.example.com/oauth/callback"
                  ],
                  "registration": "developer",
                  "review_state": "private",
                  "status": "active",
                  "updated_at": "2026-09-26T12:00:00Z",
                  "use_count": 1204
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/me/connected-apps": {
      "get": {
        "tags": [
          "connected-apps"
        ],
        "summary": "The OAuth apps you have connected",
        "description": "The apps you have connected, in every organization: scopes, connected on, last used.",
        "operationId": "connected-apps.list",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000. Filters: `filter[org_id]`, `filter[client_id]` (comma-separated values are OR-ed).",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000. Filters: `filter[org_id]`, `filter[client_id]` (comma-separated values are OR-ed)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: created_at, last_used_at, client_name. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: created_at, last_used_at, client_name. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ConnectedApp_"
                },
                "example": {
                  "data": [
                    {
                      "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
                      "client_name": "Acme HR",
                      "created_at": "2026-09-26T12:00:00Z",
                      "grant_id": "tmg_Xy12Ab34Cd56",
                      "homepage_url": "https://hr.example.com",
                      "last_used_at": "2026-09-26T13:00:00Z",
                      "org_id": "O0020",
                      "org_name": "Indrasol",
                      "scopes": [
                        "tasks:write"
                      ]
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": []
      }
    },
    "/v1/me/connected-apps/{grant_id}": {
      "delete": {
        "tags": [
          "connected-apps"
        ],
        "summary": "Disconnect an app (its tokens for you are revoked)",
        "description": "Disconnect an app: the connection and every token the app holds for you are revoked.",
        "operationId": "connected-apps.delete",
        "parameters": [
          {
            "name": "grant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Grant Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectedAppRevoked"
                },
                "example": {
                  "grant_id": "string",
                  "status": "revoked",
                  "access_revoked": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/releases/whats-new": {
      "get": {
        "tags": [
          "releases"
        ],
        "summary": "What's new \u2014 recent release notes",
        "description": "Get 'What's New' information for the specified time period.",
        "operationId": "releases.whats_new",
        "parameters": [
          {
            "name": "environment",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Environment",
              "default": "production"
            }
          },
          {
            "name": "since_days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 365,
              "minimum": 1,
              "description": "Number of days to look back",
              "default": 30,
              "title": "Since Days"
            },
            "description": "Number of days to look back"
          },
          {
            "name": "repository",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by repository",
              "title": "Repository"
            },
            "description": "Filter by repository"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WhatsNewResponse"
                },
                "example": {
                  "latest_releases": [
                    {
                      "id": "string",
                      "version": "string",
                      "tag_name": "string",
                      "release_type": "major",
                      "environment": "development",
                      "repository": "string",
                      "commit_sha": "string",
                      "branch": "string",
                      "release_date": "2026-09-25T12:00:00Z",
                      "is_prerelease": false,
                      "is_draft": false,
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "release_notes": [],
                      "summary": {
                        "features_count": 0,
                        "fixes_count": 0,
                        "breaking_changes_count": 0,
                        "total_commits": 0
                      }
                    }
                  ],
                  "summary": {},
                  "since_date": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": []
      }
    },
    "/v1/sections": {
      "get": {
        "tags": [
          "sections"
        ],
        "summary": "List a scope's sections (or several scopes')",
        "description": "The ordered sections of one scope, with their task counts.\n\n- **Your personal scope** (`scope_type=user`) starts with Assigned, Doing and Later, created on first read.\n- **A team scope** starts empty. The team owner or an org admin manages it; everyone who can read the team can read it.\n\n**Several scopes at once:** pass `scope_ids` (instead of `scope_id`) \u2014 scopes of one `scope_type`, answered as `{\"data\": [...], \"scopes\": [...]}`, each row carrying its own `scope_type` / `scope_id`.\n\n- `scope_type=user` is refused (400): personal scopes are private to their owner.\n- A scope you cannot read is **omitted**, not an error. Missing from `scopes` means not yours; present with no rows means no sections.\n- Nothing is created on this path.",
        "operationId": "sections.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization the scope belongs to.",
              "title": "Org Id"
            },
            "description": "Organization the scope belongs to."
          },
          {
            "name": "scope_type",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SectionScopeEnum",
              "description": "`project`, `user` or `team`."
            },
            "description": "`project`, `user` or `team`."
          },
          {
            "name": "scope_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "project_id for `project`; your own username for `user` (anyone else's \u2192 403); team_id for `team`. Exactly one of `scope_id` / `scope_ids`.",
              "title": "Scope Id"
            },
            "description": "project_id for `project`; your own username for `user` (anyone else's \u2192 403); team_id for `team`. Exactly one of `scope_id` / `scope_ids`."
          },
          {
            "name": "scope_ids",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Several scopes of `scope_type` in one read \u2014 repeatable and/or comma-separated (`scope_ids=P1&scope_ids=P2,P3`). Only for `project` and `team`; `user` is a 400.",
              "title": "Scope Ids"
            },
            "description": "Several scopes of `scope_type` in one read \u2014 repeatable and/or comma-separated (`scope_ids=P1&scope_ids=P2,P3`). Only for `project` and `team`; `user` is a 400."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: position, name, created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: position, name, created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/SectionsForScopes"
                    },
                    {
                      "$ref": "#/components/schemas/Page_SectionOut_"
                    }
                  ],
                  "title": "Response List Sections Route V1 Sections Get"
                },
                "example": {
                  "data": [
                    {
                      "section_id": "string",
                      "org_id": "string",
                      "scope_type": "project",
                      "scope_id": "string",
                      "name": "string",
                      "position": 0.0,
                      "task_count": 0,
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string",
                  "scopes": [
                    {
                      "scope_type": "project",
                      "scope_id": "string"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      },
      "post": {
        "tags": [
          "sections"
        ],
        "summary": "Create a section",
        "description": "Create a section (409 when the name exists in the scope). Appends at the end unless `position` is given.",
        "operationId": "sections.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SectionCreate"
              },
              "example": {
                "org_id": "string",
                "scope_type": "project",
                "scope_id": "string",
                "name": "string",
                "position": 0.0
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SectionOut"
                },
                "example": {
                  "section_id": "string",
                  "org_id": "string",
                  "scope_type": "project",
                  "scope_id": "string",
                  "name": "string",
                  "position": 0.0,
                  "task_count": 0,
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/sections/reorder": {
      "post": {
        "tags": [
          "sections"
        ],
        "summary": "Reorder a scope's sections",
        "description": "Set the order of one scope's sections to the order given (their positions become 1, 2, 3, \u2026). `section_ids` must list every section of the scope exactly once.",
        "operationId": "sections.reorder",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SectionReorder"
              },
              "example": {
                "scope_type": "project",
                "scope_id": "string",
                "section_ids": [
                  "string"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SectionOut"
                  },
                  "type": "array",
                  "title": "Response Reorder Sections Route V1 Sections Reorder Post"
                },
                "example": [
                  {
                    "section_id": "string",
                    "org_id": "string",
                    "scope_type": "project",
                    "scope_id": "string",
                    "name": "string",
                    "position": 0.0,
                    "task_count": 0,
                    "created_by": "string",
                    "updated_by": "string",
                    "created_at": "2026-09-25T12:00:00Z",
                    "updated_at": "2026-09-25T12:00:00Z"
                  }
                ]
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/sections/{section_id}": {
      "patch": {
        "tags": [
          "sections"
        ],
        "summary": "Rename a section",
        "description": "Rename and/or reposition a section.",
        "operationId": "sections.update",
        "parameters": [
          {
            "name": "section_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Section Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SectionUpdate"
              },
              "example": {
                "name": "string",
                "position": 0.0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SectionOut"
                },
                "example": {
                  "section_id": "string",
                  "org_id": "string",
                  "scope_type": "project",
                  "scope_id": "string",
                  "name": "string",
                  "position": 0.0,
                  "task_count": 0,
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "delete": {
        "tags": [
          "sections"
        ],
        "summary": "Delete a section",
        "description": "Delete a section. **Tasks are never deleted**: the tasks that were in it become unsectioned in this scope.",
        "operationId": "sections.delete",
        "parameters": [
          {
            "name": "section_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Section Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/teams": {
      "post": {
        "tags": [
          "teams"
        ],
        "summary": "Create a team",
        "description": "Create a team. Any non-guest member of the org may; the creator becomes the\nteam's `owner`. 409 when an active team of the org already has the name.",
        "operationId": "teams.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamCreate"
              },
              "example": {
                "org_id": "string",
                "name": "string",
                "description": "string",
                "member_user_ids": [
                  "string"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDetail"
                },
                "example": {
                  "team_id": "string",
                  "org_id": "string",
                  "name": "string",
                  "description": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "member_count": 0,
                  "project_count": 0,
                  "team_role": "owner",
                  "members": [
                    {
                      "team_id": "string",
                      "user_id": "string",
                      "username": "string",
                      "team_role": "owner",
                      "added_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "get": {
        "tags": [
          "teams"
        ],
        "summary": "List an organization's teams",
        "description": "The teams you can read, each with `member_count`, `project_count` and your own `team_role` (null when you are not on the team). Paginated as `{data, next_cursor, total}`, ordered by name.",
        "operationId": "teams.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization scope; the caller must be a member (a guest sees only the teams it is on).",
              "title": "Org Id"
            },
            "description": "Organization scope; the caller must be a member (a guest sees only the teams it is on)."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Case-insensitive substring of the team name.",
              "title": "Search"
            },
            "description": "Case-insensitive substring of the team name."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 50, capped at 1000.",
              "default": 50,
              "title": "Limit"
            },
            "description": "Page size; default 50, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name. Default: `name`.",
              "default": "name",
              "title": "Sort By"
            },
            "description": "One of: name. Default: `name`."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamListPage"
                },
                "example": {
                  "data": [
                    {
                      "team_id": "string",
                      "org_id": "string",
                      "name": "string",
                      "description": "string",
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "is_active": true,
                      "member_count": 0,
                      "project_count": 0,
                      "team_role": "owner"
                    }
                  ],
                  "next_cursor": "string",
                  "total": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "teams:read"
        ]
      }
    },
    "/v1/teams/{team_id}": {
      "get": {
        "tags": [
          "teams"
        ],
        "summary": "Read a team (with its members)",
        "description": "The team plus its members. `read`: any non-guest org member, or a guest on the team.",
        "operationId": "teams.read",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDetail"
                },
                "example": {
                  "team_id": "string",
                  "org_id": "string",
                  "name": "string",
                  "description": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "member_count": 0,
                  "project_count": 0,
                  "team_role": "owner",
                  "members": [
                    {
                      "team_id": "string",
                      "user_id": "string",
                      "username": "string",
                      "team_role": "owner",
                      "added_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:read"
        ]
      },
      "put": {
        "tags": [
          "teams"
        ],
        "summary": "Update a team (PUT; partial)",
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients.\n\nRename / re-describe. `edit`: the team owner or an org owner / admin.",
        "operationId": "teams.replace",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUpdate"
              },
              "example": {
                "name": "string",
                "description": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDetail"
                },
                "example": {
                  "team_id": "string",
                  "org_id": "string",
                  "name": "string",
                  "description": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "member_count": 0,
                  "project_count": 0,
                  "team_role": "owner",
                  "members": [
                    {
                      "team_id": "string",
                      "user_id": "string",
                      "username": "string",
                      "team_role": "owner",
                      "added_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ],
        "deprecated": true
      },
      "patch": {
        "tags": [
          "teams"
        ],
        "summary": "Update a team (JSON merge-patch)",
        "description": "Rename / re-describe. `edit`: the team owner or an org owner / admin.",
        "operationId": "teams.update",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUpdate"
              },
              "example": {
                "name": "string",
                "description": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDetail"
                },
                "example": {
                  "team_id": "string",
                  "org_id": "string",
                  "name": "string",
                  "description": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "member_count": 0,
                  "project_count": 0,
                  "team_role": "owner",
                  "members": [
                    {
                      "team_id": "string",
                      "user_id": "string",
                      "username": "string",
                      "team_role": "owner",
                      "added_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "delete": {
        "tags": [
          "teams"
        ],
        "summary": "Delete a team",
        "description": "SOFT delete (`is_active = false`; the team disappears from lists, its id\nstays valid for history). Never deletes a project or a task.",
        "operationId": "teams.delete",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "detach",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "First unfile everything filed under the team (its projects and tasks lose their `team_id`); without it the delete is refused (409) while anything is still filed under the team.",
              "default": false,
              "title": "Detach"
            },
            "description": "First unfile everything filed under the team (its projects and tasks lose their `team_id`); without it the delete is refused (409) while anything is still filed under the team."
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Reason"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamDeleted"
                },
                "example": {
                  "ok": false,
                  "team_id": "string",
                  "detached_projects": 0,
                  "detached_tasks": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/members": {
      "post": {
        "tags": [
          "teams"
        ],
        "summary": "Add a member to a team",
        "description": "Add an active member of the team's org (422 otherwise; a guest may only be a `member`). 409 when already on the team.",
        "operationId": "teams.add_member",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamMemberCreate"
              },
              "example": {
                "user_id": "string",
                "team_role": "member"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamMemberOut"
                },
                "example": {
                  "team_id": "string",
                  "user_id": "string",
                  "username": "string",
                  "team_role": "owner",
                  "added_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/members/{user_id}": {
      "put": {
        "tags": [
          "teams"
        ],
        "summary": "Change a team member's role (PUT)",
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients.\n\nChange a member's role. The last owner cannot be demoted (422).",
        "operationId": "teams.replace_member",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamMemberUpdate"
              },
              "example": {
                "team_role": "owner"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamMemberOut"
                },
                "example": {
                  "team_id": "string",
                  "user_id": "string",
                  "username": "string",
                  "team_role": "owner",
                  "added_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ],
        "deprecated": true
      },
      "patch": {
        "tags": [
          "teams"
        ],
        "summary": "Change a team member's role",
        "description": "Change a member's role. The last owner cannot be demoted (422).",
        "operationId": "teams.update_member",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamMemberUpdate"
              },
              "example": {
                "team_role": "owner"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamMemberOut"
                },
                "example": {
                  "team_id": "string",
                  "user_id": "string",
                  "username": "string",
                  "team_role": "owner",
                  "added_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "delete": {
        "tags": [
          "teams"
        ],
        "summary": "Remove a team member",
        "description": "Remove a member. The last owner cannot be removed (422).",
        "operationId": "teams.remove_member",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "User Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/intake": {
      "get": {
        "tags": [
          "teams"
        ],
        "summary": "A team's unfiled tasks (the team List's read; task-list envelope)",
        "description": "The team's tasks filed under the team and in no project.\n\n- Works like `GET /v1/tasks`: its other `filter[...]` parameters, sort, cursor paging and `section_scope` all apply.\n- `filter[team]` and `filter[project]` are set for you.\n- A guest, who cannot hold such tasks, gets an empty page.",
        "operationId": "teams.list_tasks",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size, default 100; clamped to 1000.",
              "default": 100,
              "title": "Limit"
            },
            "description": "Page size, default 100; clamped to 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque token from the previous page's `next_cursor`.",
              "title": "Cursor"
            },
            "description": "Opaque token from the previous page's `next_cursor`."
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type.",
              "default": "title",
              "title": "Sort By"
            },
            "description": "One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "asc",
              "title": "Sort Order"
            }
          },
          {
            "name": "include_inaccessible",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Keep restricted rows with `has_access=false` (the task list's flag).",
              "default": false,
              "title": "Include Inaccessible"
            },
            "description": "Keep restricted rows with `has_access=false` (the task list's flag)."
          },
          {
            "name": "section_scope",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`team:<id>`, `user:me` or `project:<id>`: annotate rows with `section_id` / `section_position` for that scope. Usually `team:<this team>`.",
              "title": "Section Scope"
            },
            "description": "`team:<id>`, `user:me` or `project:<id>`: annotate rows with `section_id` / `section_position` for that scope. Usually `team:<this team>`."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskListPage"
                },
                "example": {
                  "data": [
                    {
                      "project_id": "project-1234",
                      "org_id": "org-1234",
                      "sub_tasks": [
                        "task-5678"
                      ],
                      "dependencies": [
                        "task-4321"
                      ],
                      "title": "Implement Login",
                      "description": "Implement OAuth2 login flow.",
                      "status": "not_started",
                      "assignee": "",
                      "start_date": "2024-07-31",
                      "due_date": "2024-08-01",
                      "priority": "high",
                      "task_type": "task",
                      "tags": [
                        "backend",
                        "auth"
                      ],
                      "type_data": {},
                      "metadata": [
                        {
                          "field": "status",
                          "new": "in_progress",
                          "old": "not_started"
                        }
                      ],
                      "created_by": "string",
                      "updated_by": "string",
                      "is_subtask": false,
                      "bug_id": "B1234",
                      "tracker_id": "TR1234",
                      "restricted_to": [],
                      "team_id": "string",
                      "sprint_id": "SP12345",
                      "milestone_id": "MS12345",
                      "goal_id": "G12345",
                      "task_id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "restricted_to_user_ids": [
                        "string"
                      ],
                      "comments": 0,
                      "has_access": true,
                      "has_edit_access": false,
                      "section_id": "string",
                      "section_position": 0.0
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "teams:read"
        ]
      }
    },
    "/v1/teams/{team_id}/sprints": {
      "get": {
        "tags": [
          "sprints"
        ],
        "summary": "List a team's sprints",
        "description": "The team's live sprints, latest first, each with `task_count` / `completed_count` and the derived `duration_weeks` / `duration_label`. Completed sprints are included; they are no longer offered as the current sprint.",
        "operationId": "sprints.list",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: start_date, end_date, name, created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: start_date, end_date, name, created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SprintListPage"
                },
                "example": {
                  "data": [
                    {
                      "sprint_id": "string",
                      "org_id": "string",
                      "team_id": "string",
                      "name": "string",
                      "description": "string",
                      "goal": "string",
                      "start_date": "2026-09-25",
                      "end_date": "2026-09-25",
                      "status": "active",
                      "completed_at": "2026-09-25T12:00:00Z",
                      "completed_by": "string",
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "is_active": true,
                      "duration_weeks": 0,
                      "duration_label": "",
                      "task_count": 0,
                      "completed_count": 0
                    }
                  ],
                  "next_cursor": "string",
                  "total": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "teams:read"
        ]
      },
      "post": {
        "tags": [
          "sprints"
        ],
        "summary": "Create a sprint",
        "description": "Create a sprint. Requires edit access to the team. Send `end_date` or `duration_weeks` \u2014 both is a 422; the sprint stores the end date and derives the weeks. 409 on a duplicate active name.",
        "operationId": "sprints.create",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SprintCreate"
              },
              "example": {
                "name": "string",
                "description": "string",
                "goal": "string",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "duration_weeks": 1
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SprintOut"
                },
                "example": {
                  "sprint_id": "string",
                  "org_id": "string",
                  "team_id": "string",
                  "name": "string",
                  "description": "string",
                  "goal": "string",
                  "start_date": "2026-09-25",
                  "end_date": "2026-09-25",
                  "status": "active",
                  "completed_at": "2026-09-25T12:00:00Z",
                  "completed_by": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "duration_weeks": 0,
                  "duration_label": "",
                  "task_count": 0,
                  "completed_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/sprints/{sprint_id}": {
      "put": {
        "tags": [
          "sprints"
        ],
        "summary": "Update a sprint",
        "description": "Rename / re-describe / reschedule / complete / re-open. A true partial. Completing\na sprint writes `status`, `completed_at` and `completed_by` on THIS ROW and does\nnothing whatever to its tasks.",
        "operationId": "sprints.update",
        "parameters": [
          {
            "name": "sprint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Sprint Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SprintUpdate"
              },
              "example": {
                "name": "string",
                "description": "string",
                "goal": "string",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "duration_weeks": 1,
                "status": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SprintOut"
                },
                "example": {
                  "sprint_id": "string",
                  "org_id": "string",
                  "team_id": "string",
                  "name": "string",
                  "description": "string",
                  "goal": "string",
                  "start_date": "2026-09-25",
                  "end_date": "2026-09-25",
                  "status": "active",
                  "completed_at": "2026-09-25T12:00:00Z",
                  "completed_by": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "duration_weeks": 0,
                  "duration_label": "",
                  "task_count": 0,
                  "completed_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "delete": {
        "tags": [
          "sprints"
        ],
        "summary": "Delete a sprint (its tasks are unfiled)",
        "description": "SOFT delete, and the tasks it held are UNFILED (`sprint_id` \u2192 null). No task is\ndeleted, ever; the response says how many were unfiled so the client can say so too.",
        "operationId": "sprints.delete",
        "parameters": [
          {
            "name": "sprint_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Sprint Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Reason"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SprintDeleted"
                },
                "example": {
                  "ok": false,
                  "sprint_id": "string",
                  "unfiled_tasks": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/availability": {
      "get": {
        "tags": [
          "availability"
        ],
        "summary": "A team's availability over a date range",
        "description": "The team's active members and every unavailability entry of theirs that intersects `[from, to]`, in one response. A guest on the team receives only their own entries. 400 for a missing, malformed or inverted window, or one longer than 93 days.",
        "operationId": "availability.range",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "First day of the window, YYYY-MM-DD",
              "title": "From"
            },
            "description": "First day of the window, YYYY-MM-DD"
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Last day of the window (inclusive), YYYY-MM-DD \u2014 at most 93 days after `from`",
              "title": "To"
            },
            "description": "Last day of the window (inclusive), YYYY-MM-DD \u2014 at most 93 days after `from`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvailabilityRange"
                },
                "example": {
                  "team_id": "string",
                  "from": "2026-09-25",
                  "to": "2026-09-25",
                  "members": [
                    {
                      "user_id": "string",
                      "username": "string",
                      "team_role": "string"
                    }
                  ],
                  "entries": [
                    {
                      "entry_id": "string",
                      "org_id": "string",
                      "user_id": "string",
                      "start_date": "2026-09-25",
                      "end_date": "2026-09-25",
                      "note": "string",
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:read"
        ]
      },
      "post": {
        "tags": [
          "availability"
        ],
        "summary": "Mark someone unavailable",
        "description": "Mark a range unavailable. 422 when the person is not on this team or the range is\ninverted; 403 when the caller may not write that person; 409 (with the colliding\n`entry_id`) when it overlaps one of their entries.",
        "operationId": "availability.create",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AvailabilityCreate"
              },
              "example": {
                "user_id": "string",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "note": "string"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvailabilityEntry"
                },
                "example": {
                  "entry_id": "string",
                  "org_id": "string",
                  "user_id": "string",
                  "start_date": "2026-09-25",
                  "end_date": "2026-09-25",
                  "note": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/availability/{entry_id}": {
      "put": {
        "tags": [
          "availability"
        ],
        "summary": "Change an unavailability entry",
        "description": "A true partial over dates and note. `user_id` is immutable (422). 404 for an unknown\nentry or one of another org.",
        "operationId": "availability.update",
        "parameters": [
          {
            "name": "entry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Entry Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AvailabilityUpdate"
              },
              "example": {
                "user_id": "string",
                "start_date": "2026-09-25",
                "end_date": "2026-09-25",
                "note": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvailabilityEntry"
                },
                "example": {
                  "entry_id": "string",
                  "org_id": "string",
                  "user_id": "string",
                  "start_date": "2026-09-25",
                  "end_date": "2026-09-25",
                  "note": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "delete": {
        "tags": [
          "availability"
        ],
        "summary": "Remove an unavailability entry",
        "description": "HARD delete (a mark, not a record); the `availability.deleted` event keeps what it was.",
        "operationId": "availability.delete",
        "parameters": [
          {
            "name": "entry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Entry Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvailabilityDeleted"
                },
                "example": {
                  "ok": false,
                  "entry_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/milestones": {
      "get": {
        "tags": [
          "milestones"
        ],
        "summary": "List a team's milestones",
        "description": "Every live milestone of the team in ONE response: open first by target date, then\nclosed by `closed_at`, latest first, each with `task_count` / `completed_count`. Not\npaginated \u2014 a team has tens, not thousands.",
        "operationId": "milestones.list",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: target_date, title, closed_at, created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: target_date, title, closed_at, created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MilestoneList"
                },
                "example": {
                  "data": [
                    {
                      "milestone_id": "string",
                      "org_id": "string",
                      "team_id": "string",
                      "title": "string",
                      "target_date": "2026-09-25",
                      "description": "string",
                      "owner_user_id": "string",
                      "status": "open",
                      "closed_at": "2026-09-25T12:00:00Z",
                      "closed_by": "string",
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "is_active": true,
                      "stop_id": "string",
                      "task_count": 0,
                      "completed_count": 0
                    }
                  ],
                  "next_cursor": "string",
                  "total": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "teams:read"
        ]
      },
      "post": {
        "tags": [
          "milestones"
        ],
        "summary": "Create a milestone",
        "description": "Create an open milestone. `edit` on the team. 409 on a duplicate live title (open or\nclosed), 422 when the owner is not an active member of this team.",
        "operationId": "milestones.create",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MilestoneCreate"
              },
              "example": {
                "title": "string",
                "target_date": "2026-09-25",
                "description": "string",
                "owner_user_id": "string"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MilestoneOut"
                },
                "example": {
                  "milestone_id": "string",
                  "org_id": "string",
                  "team_id": "string",
                  "title": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "owner_user_id": "string",
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "stop_id": "string",
                  "task_count": 0,
                  "completed_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/teams/{team_id}/milestones/{milestone_id}": {
      "put": {
        "tags": [
          "milestones"
        ],
        "summary": "Update / close a milestone",
        "description": "A true partial. `{status: 'closed'}` closes (writes `closed_at` / `closed_by`),\n`{status: 'open'}` re-opens (clears them). The milestone's owner may send `status` alone.",
        "operationId": "milestones.update",
        "parameters": [
          {
            "name": "milestone_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Milestone Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MilestoneUpdate"
              },
              "example": {
                "title": "string",
                "target_date": "2026-09-25",
                "description": "string",
                "owner_user_id": "string",
                "status": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MilestoneOut"
                },
                "example": {
                  "milestone_id": "string",
                  "org_id": "string",
                  "team_id": "string",
                  "title": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "owner_user_id": "string",
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "stop_id": "string",
                  "task_count": 0,
                  "completed_count": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      },
      "delete": {
        "tags": [
          "milestones"
        ],
        "summary": "Delete a milestone",
        "description": "SOFT delete; GET stops returning it, and the tasks it held are UNFILED (`milestone_id`\n\u2192 null). No task is deleted; the response says how many were unfiled.",
        "operationId": "milestones.delete",
        "parameters": [
          {
            "name": "milestone_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Milestone Id"
            }
          },
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Reason"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MilestoneDeleted"
                },
                "example": {
                  "ok": false,
                  "milestone_id": "string",
                  "unfiled_tasks": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "teams:write"
        ]
      }
    },
    "/v1/roadmap": {
      "get": {
        "tags": [
          "roadmap"
        ],
        "summary": "The organization's roadmap",
        "description": "The organization's roadmap: every project you can read that has journeys, plus the readable projects that have none.",
        "operationId": "roadmap.org",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization scope; the caller must be a member (a guest sees only the projects it can read).",
              "title": "Org Id"
            },
            "description": "Organization scope; the caller must be a member (a guest sees only the projects it can read)."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoadmapOut"
                },
                "example": {
                  "projects": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "team_id": "string",
                      "can_edit": false,
                      "journeys": [
                        {
                          "journey_id": "string",
                          "project_id": "string",
                          "name": "string",
                          "color": "string",
                          "position": 0,
                          "stops": [
                            {
                              "stop_id": "string",
                              "project_id": "string",
                              "title": "string",
                              "target_date": "2026-09-25",
                              "description": "string",
                              "position": 0,
                              "done": 0,
                              "total": 0,
                              "journey_ids": [
                                "string"
                              ],
                              "milestone_ids": [
                                "string"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "projects_without_roadmap": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "can_edit": false
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/projects/{project_id}/roadmap": {
      "get": {
        "tags": [
          "roadmap"
        ],
        "summary": "A project's roadmap",
        "description": "The project's roadmap: the same shape as a team's roadmap, narrowed to this project.",
        "operationId": "roadmap.project",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoadmapOut"
                },
                "example": {
                  "projects": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "team_id": "string",
                      "can_edit": false,
                      "journeys": [
                        {
                          "journey_id": "string",
                          "project_id": "string",
                          "name": "string",
                          "color": "string",
                          "position": 0,
                          "stops": [
                            {
                              "stop_id": "string",
                              "project_id": "string",
                              "title": "string",
                              "target_date": "2026-09-25",
                              "description": "string",
                              "position": 0,
                              "done": 0,
                              "total": 0,
                              "journey_ids": [
                                "string"
                              ],
                              "milestone_ids": [
                                "string"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "projects_without_roadmap": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "can_edit": false
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/teams/{team_id}/roadmap": {
      "get": {
        "tags": [
          "roadmap"
        ],
        "summary": "A team's roadmap",
        "description": "Every readable project of the team with journeys, one band each, and the readable ones without.",
        "operationId": "roadmap.team",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Team Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoadmapOut"
                },
                "example": {
                  "projects": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "team_id": "string",
                      "can_edit": false,
                      "journeys": [
                        {
                          "journey_id": "string",
                          "project_id": "string",
                          "name": "string",
                          "color": "string",
                          "position": 0,
                          "stops": [
                            {
                              "stop_id": "string",
                              "project_id": "string",
                              "title": "string",
                              "target_date": "2026-09-25",
                              "description": "string",
                              "position": 0,
                              "done": 0,
                              "total": 0,
                              "journey_ids": [
                                "string"
                              ],
                              "milestone_ids": [
                                "string"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "projects_without_roadmap": [
                    {
                      "project_id": "string",
                      "name": "string",
                      "can_edit": false
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/tasks/{task_id}/roadmap": {
      "get": {
        "tags": [
          "roadmap"
        ],
        "summary": "The roadmap stops a task is on",
        "description": "The live roadmap stops this task is on \u2014 directly, or through its milestone's pin \u2014 among the projects you can read, paginated as `{data, next_cursor}`.",
        "operationId": "roadmap.task_stops",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: title. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: title. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TaskRoadmapStop_"
                },
                "example": {
                  "data": [
                    {
                      "stop_id": "string",
                      "project_id": "string",
                      "title": "string",
                      "via": "string",
                      "journeys": [
                        {}
                      ]
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/goals": {
      "get": {
        "tags": [
          "goals"
        ],
        "summary": "Every goal you can read in an organization, grouped by project",
        "description": "Every live goal in the projects you can read, grouped by project. Each goal carries its task roll-up, and each group `goals_tasks_total` / `goals_tasks_completed`.",
        "operationId": "goals.org",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization scope; the caller must be a member (a guest sees only its projects' goals).",
              "title": "Org Id"
            },
            "description": "Organization scope; the caller must be a member (a guest sees only its projects' goals)."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrgGoalsOut"
                },
                "example": {
                  "org_id": "string",
                  "projects": [
                    {
                      "project_id": "string",
                      "data": [
                        {
                          "goal_id": "string",
                          "org_id": "string",
                          "project_id": "string",
                          "name": "string",
                          "target_date": "2026-09-25",
                          "description": "string",
                          "position": 0,
                          "status": "open",
                          "closed_at": "2026-09-25T12:00:00Z",
                          "closed_by": "string",
                          "converted_from_task_id": "string",
                          "created_by": "string",
                          "updated_by": "string",
                          "created_at": "2026-09-25T12:00:00Z",
                          "updated_at": "2026-09-25T12:00:00Z",
                          "tasks_total": 0,
                          "tasks_completed": 0,
                          "tasks": [
                            {}
                          ]
                        }
                      ],
                      "next_cursor": "string",
                      "goals_tasks_total": 0,
                      "goals_tasks_completed": 0
                    }
                  ],
                  "total": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:read"
        ]
      }
    },
    "/v1/projects/{project_id}/goals": {
      "get": {
        "tags": [
          "goals"
        ],
        "summary": "List a project's goals",
        "description": "The project's goals by position, paginated as `{data, next_cursor}`; the project-level sums are returned beside `data`.",
        "operationId": "goals.list",
        "parameters": [
          {
            "name": "include_tasks",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Embed each goal's task rows (the caller's readable ones).",
              "default": false,
              "title": "Include Tasks"
            },
            "description": "Embed each goal's task rows (the caller's readable ones)."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: position, name, target_date, created_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: position, name, target_date, created_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectGoalsOut"
                },
                "example": {
                  "project_id": "string",
                  "data": [
                    {
                      "goal_id": "string",
                      "org_id": "string",
                      "project_id": "string",
                      "name": "string",
                      "target_date": "2026-09-25",
                      "description": "string",
                      "position": 0,
                      "status": "open",
                      "closed_at": "2026-09-25T12:00:00Z",
                      "closed_by": "string",
                      "converted_from_task_id": "string",
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "tasks_total": 0,
                      "tasks_completed": 0,
                      "tasks": [
                        {}
                      ]
                    }
                  ],
                  "next_cursor": "string",
                  "goals_tasks_total": 0,
                  "goals_tasks_completed": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "projects:read"
        ]
      },
      "post": {
        "tags": [
          "goals"
        ],
        "summary": "Create a goal in a project",
        "operationId": "goals.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalCreate"
              },
              "example": {
                "name": "string",
                "target_date": "2026-09-25",
                "description": "string"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalOut"
                },
                "example": {
                  "goal_id": "string",
                  "org_id": "string",
                  "project_id": "string",
                  "name": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "position": 0,
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "converted_from_task_id": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "tasks_total": 0,
                  "tasks_completed": 0,
                  "tasks": [
                    {}
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Replay the first response for 24 h when the same request is retried with this key."
          }
        ],
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "create",
        "x-scopes": [
          "projects:write"
        ],
        "description": "Create a goal in a project."
      }
    },
    "/v1/projects/reorder": {
      "post": {
        "tags": [
          "projects"
        ],
        "summary": "Reorder the organization's projects (owner / admin)",
        "description": "The org's drag order. Org owner / admin only; the listed projects are re-ordered among their own slots.",
        "operationId": "projects.reorder",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectOrder"
              },
              "example": {
                "org_id": "string",
                "project_ids": [
                  "string"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectsReordered"
                },
                "example": {
                  "ok": false,
                  "org_id": "string",
                  "project_ids": [
                    "string"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/projects/{project_id}/goals/reorder": {
      "post": {
        "tags": [
          "goals"
        ],
        "summary": "Reorder a project's goals",
        "operationId": "goals.reorder",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalOrder"
              },
              "example": {
                "goal_ids": [
                  "string"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalsReordered"
                },
                "example": {
                  "ok": false,
                  "goal_ids": [
                    "string"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Reorder a project's goals."
      }
    },
    "/v1/projects/{project_id}/goals/{goal_id}": {
      "put": {
        "tags": [
          "goals"
        ],
        "summary": "Update a goal (PUT; partial)",
        "operationId": "goals.replace",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalUpdate"
              },
              "example": {
                "name": "string",
                "target_date": "2026-09-25",
                "description": "string",
                "status": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalOut"
                },
                "example": {
                  "goal_id": "string",
                  "org_id": "string",
                  "project_id": "string",
                  "name": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "position": 0,
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "converted_from_task_id": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "tasks_total": 0,
                  "tasks_completed": 0,
                  "tasks": [
                    {}
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "deprecated": true,
        "description": "**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients."
      },
      "patch": {
        "tags": [
          "goals"
        ],
        "summary": "Update a goal (JSON merge-patch)",
        "operationId": "goals.update",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalUpdate"
              },
              "example": {
                "name": "string",
                "target_date": "2026-09-25",
                "description": "string",
                "status": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalOut"
                },
                "example": {
                  "goal_id": "string",
                  "org_id": "string",
                  "project_id": "string",
                  "name": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "position": 0,
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "converted_from_task_id": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "tasks_total": 0,
                  "tasks_completed": 0,
                  "tasks": [
                    {}
                  ]
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ],
        "description": "Update a goal (JSON merge-patch)."
      },
      "delete": {
        "tags": [
          "goals"
        ],
        "summary": "Delete a goal (its tasks are unfiled)",
        "description": "SOFT delete; its tasks are unfiled (they stay in the project) and the response says how many.",
        "operationId": "goals.delete",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Reason"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalDeleted"
                },
                "example": {
                  "ok": false,
                  "goal_id": "string",
                  "unfiled_tasks": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/projects/{project_id}/goals/{goal_id}/move": {
      "post": {
        "tags": [
          "goals"
        ],
        "summary": "Move a goal and its tasks to another project",
        "description": "The goal AND its tasks move to `project_id`, all-or-nothing (403 naming the first task that may not move).",
        "operationId": "goals.move",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalMove"
              },
              "example": {
                "project_id": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalMoved"
                },
                "example": {
                  "goal_id": "string",
                  "org_id": "string",
                  "project_id": "string",
                  "name": "string",
                  "target_date": "2026-09-25",
                  "description": "string",
                  "position": 0,
                  "status": "open",
                  "closed_at": "2026-09-25T12:00:00Z",
                  "closed_by": "string",
                  "converted_from_task_id": "string",
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "tasks_total": 0,
                  "tasks_completed": 0,
                  "tasks": [
                    {}
                  ],
                  "moved_tasks": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/projects/{project_id}/goals/{goal_id}/tasks": {
      "post": {
        "tags": [
          "goals"
        ],
        "summary": "File tasks under a goal",
        "description": "File existing tasks of THIS project under the goal \u2014 each needs the task's own `edit`; all-or-nothing.",
        "operationId": "goals.file_tasks",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoalTasksFile"
              },
              "example": {
                "task_ids": [
                  "string"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalTasksFiled"
                },
                "example": {
                  "ok": false,
                  "goal_id": "string",
                  "filed": 0
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/projects/{project_id}/goals/{goal_id}/tasks/{task_id}": {
      "delete": {
        "tags": [
          "goals"
        ],
        "summary": "Take a task out of a goal",
        "description": "Take the task out of the goal (`goal_id` \u2192 null); it keeps its project and is never deleted.",
        "operationId": "goals.unfile_task",
        "parameters": [
          {
            "name": "goal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Goal Id"
            }
          },
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Task Id"
            }
          },
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "project_id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoalTaskUnfiled"
                },
                "example": {
                  "ok": false,
                  "goal_id": "string",
                  "task_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "projects:write"
        ]
      }
    },
    "/v1/me": {
      "get": {
        "tags": [
          "me"
        ],
        "summary": "The authenticated principal and its organizations / roles",
        "description": "Who you are: the authenticated principal and every organization it is an active member of, with its role there.\n\nWith an access token:\n- `principal.type` is `service_account` for a service account;\n- only the token's organization is listed;\n- `auth` carries the token's id, scopes, projects and expiry.",
        "operationId": "me.read",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeOut"
                },
                "example": {
                  "organizations": [
                    {
                      "designation": "Engineering Manager",
                      "name": "Indrasol",
                      "org_id": "O0020",
                      "role": "owner"
                    }
                  ],
                  "principal": {
                    "email": "ada@example.com",
                    "email_verified": true,
                    "id": "3f1c\u2026",
                    "type": "user",
                    "username": "ada"
                  }
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [],
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ]
      }
    },
    "/v1/audit": {
      "get": {
        "tags": [
          "audit"
        ],
        "summary": "The organization's audit log (owner / admin)",
        "description": "One page of the org's audit log, newest first: `{\"data\": [events...], \"next_cursor\": \"<opaque>\" | null}`.",
        "operationId": "audit.list",
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque token from the previous page's `next_cursor`. Only ever echo it back.",
              "title": "Cursor"
            },
            "description": "Opaque token from the previous page's `next_cursor`. Only ever echo it back."
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The organization whose log to read (owner / admin only)",
              "title": "Org Id"
            },
            "description": "The organization whose log to read (owner / admin only)"
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "task | project | organization | member | invite | team | designation | section | settings",
              "title": "Resource Type"
            },
            "description": "task | project | organization | member | invite | team | designation | section | settings"
          },
          {
            "name": "resource_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One resource's trail (with resource_type)",
              "title": "Resource Id"
            },
            "description": "One resource's trail (with resource_type)"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One project's events: every event recorded against this project.",
              "title": "Project Id"
            },
            "description": "One project's events: every event recorded against this project."
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Prefix match: `project.` for the family, `member.role_changed` for one action",
              "title": "Action"
            },
            "description": "Prefix match: `project.` for the family, `member.role_changed` for one action"
          },
          {
            "name": "actor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Username or user id",
              "title": "Actor"
            },
            "description": "Username or user id"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601; inclusive",
              "title": "From"
            },
            "description": "ISO 8601; inclusive"
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601; inclusive",
              "title": "To"
            },
            "description": "ISO 8601; inclusive"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditPage"
                },
                "example": {
                  "data": [
                    {}
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/audit.csv": {
      "get": {
        "tags": [
          "audit"
        ],
        "summary": "Export the audit log as CSV (owner / admin)",
        "description": "The same filtered rows as CSV, streamed. 422 above 50 000 rows \u2014 narrow `from` / `to`.",
        "operationId": "audit.export",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "The organization whose log to read (owner / admin only)",
              "title": "Org Id"
            },
            "description": "The organization whose log to read (owner / admin only)"
          },
          {
            "name": "resource_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "task | project | organization | member | invite | team | designation | section | settings",
              "title": "Resource Type"
            },
            "description": "task | project | organization | member | invite | team | designation | section | settings"
          },
          {
            "name": "resource_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One resource's trail (with resource_type)",
              "title": "Resource Id"
            },
            "description": "One resource's trail (with resource_type)"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One project's events: every event recorded against this project.",
              "title": "Project Id"
            },
            "description": "One project's events: every event recorded against this project."
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Prefix match: `project.` for the family, `member.role_changed` for one action",
              "title": "Action"
            },
            "description": "Prefix match: `project.` for the family, `member.role_changed` for one action"
          },
          {
            "name": "actor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Username or user id",
              "title": "Actor"
            },
            "description": "Username or user id"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601; inclusive",
              "title": "From"
            },
            "description": "ISO 8601; inclusive"
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601; inclusive",
              "title": "To"
            },
            "description": "ISO 8601; inclusive"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                },
                "example": "event_id,occurred_at,action,...\n"
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "admin"
        ]
      }
    },
    "/v1/views": {
      "get": {
        "tags": [
          "views"
        ],
        "summary": "Saved views you can read (filter by `resource`: task or project)",
        "description": "Every saved view you can read: personal first, then team, then project. Each carries `resource` (the list it queries), `can_edit` (whether you may change it) and `pinned` (whether you pinned it), paginated as `{data, next_cursor}`.",
        "operationId": "views.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Organization scope; the caller must be a member (a guest included).",
              "title": "Org Id"
            },
            "description": "Organization scope; the caller must be a member (a guest included)."
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`user` | `team` | `project` \u2014 only that scope's views.",
              "title": "Scope"
            },
            "description": "`user` | `team` | `project` \u2014 only that scope's views."
          },
          {
            "name": "resource",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`task` or `project`: only views of that list. Omit it for both.",
              "title": "Resource"
            },
            "description": "`task` or `project`: only views of that list. Omit it for both."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: name, created_at, updated_at. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: name, created_at, updated_at. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewListPage"
                },
                "example": {
                  "data": [
                    {
                      "view_id": "string",
                      "org_id": "string",
                      "scope_type": "user",
                      "scope_id": "string",
                      "resource": "task",
                      "name": "string",
                      "query": {},
                      "display": {},
                      "created_by": "string",
                      "updated_by": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "is_active": true,
                      "can_edit": false,
                      "pinned": false
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      },
      "post": {
        "tags": [
          "views"
        ],
        "summary": "Save a view of the task list or the projects list (`resource`)",
        "description": "Save a view.\n\n- `resource` picks the list: `task` (default) stores `GET /v1/tasks` parameters; `project` stores `GET /v1/projects/{org_id}` parameters, `show_all` included. It cannot change later.\n- `query` is checked by that list's own rules: an unknown key or value is the same 400 the list gives.\n- Scopes: `user` (anyone in the organization), `team` (team owners and org admins), `project` (project owners and editors; task views only).\n- A name is unique among a scope's views of the same resource (409 otherwise).",
        "operationId": "views.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewCreate"
              },
              "example": {
                "org_id": "string",
                "scope_type": "user",
                "scope_id": "string",
                "resource": "task",
                "name": "string",
                "query": {},
                "display": {}
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewOut"
                },
                "example": {
                  "view_id": "string",
                  "org_id": "string",
                  "scope_type": "user",
                  "scope_id": "string",
                  "resource": "task",
                  "name": "string",
                  "query": {},
                  "display": {},
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "can_edit": false,
                  "pinned": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/views/{view_id}": {
      "get": {
        "tags": [
          "views"
        ],
        "summary": "Read a saved view (its `resource` says which list it queries)",
        "operationId": "views.read",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewOut"
                },
                "example": {
                  "view_id": "string",
                  "org_id": "string",
                  "scope_type": "user",
                  "scope_id": "string",
                  "resource": "task",
                  "name": "string",
                  "query": {},
                  "display": {},
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "can_edit": false,
                  "pinned": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:read"
        ],
        "description": "Read a saved view (its `resource` says which list it queries)."
      },
      "patch": {
        "tags": [
          "views"
        ],
        "summary": "Update a saved view",
        "description": "Rename, re-query or re-display. `edit`: the owner (personal), the team owner /\norg admin (team), a project owner / editor / org admin (project). `resource` is\nread-only: a different value is a 400.",
        "operationId": "views.update",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewUpdate"
              },
              "example": {
                "resource": "task",
                "name": "string",
                "query": {},
                "display": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewOut"
                },
                "example": {
                  "view_id": "string",
                  "org_id": "string",
                  "scope_type": "user",
                  "scope_id": "string",
                  "resource": "task",
                  "name": "string",
                  "query": {},
                  "display": {},
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "can_edit": false,
                  "pinned": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "delete": {
        "tags": [
          "views"
        ],
        "summary": "Delete a saved view",
        "description": "SOFT delete (`is_active = false`); everyone's pins of it go too. `delete` = the scope's write rule.",
        "operationId": "views.delete",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The `ETag` you read; a stale one is a 412 and nothing is written."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewDeleted"
                },
                "example": {
                  "ok": false,
                  "view_id": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/views/{view_id}/duplicate": {
      "post": {
        "tags": [
          "views"
        ],
        "summary": "Duplicate a saved view",
        "description": "Copy the view (its `resource` included) into a scope the caller may write (default: personal). Needs `read` on the source.",
        "operationId": "views.duplicate",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewDuplicate"
              },
              "example": {
                "scope_type": "user",
                "scope_id": "string",
                "name": "string"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewOut"
                },
                "example": {
                  "view_id": "string",
                  "org_id": "string",
                  "scope_type": "user",
                  "scope_id": "string",
                  "resource": "task",
                  "name": "string",
                  "query": {},
                  "display": {},
                  "created_by": "string",
                  "updated_by": "string",
                  "created_at": "2026-09-25T12:00:00Z",
                  "updated_at": "2026-09-25T12:00:00Z",
                  "is_active": true,
                  "can_edit": false,
                  "pinned": false
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/views/{view_id}/rows": {
      "get": {
        "tags": [
          "views"
        ],
        "summary": "The rows a saved view shows: tasks or projects, per its `resource`",
        "description": "The rows a saved view shows, as `{data, next_cursor}`: tasks for a `task` view, projects for a `project` view.\n\n- The view's stored `query` runs like its list (`GET /v1/tasks` or `GET /v1/projects/{org_id}`), with **your** visibility: a team view opened by a guest returns the guest's rows.\n- Only `limit`, `cursor` and `include_inaccessible` are accepted; any `filter[...]`, `sort_by`, `group_by`, `section_scope` or `show_all` here is a 400.",
        "operationId": "views.rows",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size, default 100; clamped to 1000.",
              "default": 100,
              "title": "Limit"
            },
            "description": "Page size, default 100; clamped to 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque token from the previous page's `next_cursor`.",
              "title": "Cursor"
            },
            "description": "Opaque token from the previous page's `next_cursor`."
          },
          {
            "name": "include_inaccessible",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Keep restricted rows with `has_access=false` (the list's flag).",
              "default": false,
              "title": "Include Inaccessible"
            },
            "description": "Keep restricted rows with `has_access=false` (the list's flag)."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/TaskListPage"
                    },
                    {
                      "$ref": "#/components/schemas/Page_ProjectCard_"
                    }
                  ],
                  "title": "Response View Rows Route V1 Views  View Id  Rows Get"
                },
                "example": {
                  "data": [
                    {
                      "project_id": "project-1234",
                      "org_id": "org-1234",
                      "sub_tasks": [
                        "task-5678"
                      ],
                      "dependencies": [
                        "task-4321"
                      ],
                      "title": "Implement Login",
                      "description": "Implement OAuth2 login flow.",
                      "status": "not_started",
                      "assignee": "",
                      "start_date": "2024-07-31",
                      "due_date": "2024-08-01",
                      "priority": "high",
                      "task_type": "task",
                      "tags": [
                        "backend",
                        "auth"
                      ],
                      "type_data": {},
                      "metadata": [
                        {
                          "field": "status",
                          "new": "in_progress",
                          "old": "not_started"
                        }
                      ],
                      "created_by": "string",
                      "updated_by": "string",
                      "is_subtask": false,
                      "bug_id": "B1234",
                      "tracker_id": "TR1234",
                      "restricted_to": [],
                      "team_id": "string",
                      "sprint_id": "SP12345",
                      "milestone_id": "MS12345",
                      "goal_id": "G12345",
                      "task_id": "string",
                      "created_at": "2026-09-25T12:00:00Z",
                      "updated_at": "2026-09-25T12:00:00Z",
                      "restricted_to_user_ids": [
                        "string"
                      ],
                      "comments": 0,
                      "has_access": true,
                      "has_edit_access": false,
                      "section_id": "string",
                      "section_position": 0.0
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/views/{view_id}/pin": {
      "put": {
        "tags": [
          "view-pins"
        ],
        "summary": "Pin a view to your sidebar",
        "description": "Pin the view for the CALLER (pins are personal, even for a shared view; a guest may pin). Needs `read`.",
        "operationId": "view-pins.pin_view",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinOut"
                },
                "example": {
                  "pin_type": "view",
                  "pin_id": "string",
                  "org_id": "string",
                  "position": 0.0,
                  "label": "string",
                  "scope_type": "user",
                  "resource": "task",
                  "created_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "delete": {
        "tags": [
          "view-pins"
        ],
        "summary": "Unpin a view",
        "description": "Remove the caller's pin of the view (idempotent; the view itself is untouched).",
        "operationId": "view-pins.unpin_view",
        "parameters": [
          {
            "name": "view_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "View Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/v1/view-pins": {
      "get": {
        "tags": [
          "view-pins"
        ],
        "summary": "Your pins (views and projects), in order",
        "description": "Your pins in the organization (views and projects), in `position` order with their labels, paginated as `{data, next_cursor}`.",
        "operationId": "view-pins.list",
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Page size; default 1000, capped at 1000.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Page size; default 1000, capped at 1000."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The previous page's `next_cursor`, echoed back verbatim",
              "title": "Cursor"
            },
            "description": "The previous page's `next_cursor`, echoed back verbatim"
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One of: position. Default: the list's natural order.",
              "title": "Sort By"
            },
            "description": "One of: position. Default: the list's natural order."
          },
          {
            "name": "sort_order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "`asc` or `desc`",
              "default": "asc",
              "title": "Sort Order"
            },
            "description": "`asc` or `desc`"
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "An `ETag` you hold; unchanged \u2192 304 with no body."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinListPage"
                },
                "example": {
                  "data": [
                    {
                      "pin_type": "view",
                      "pin_id": "string",
                      "org_id": "string",
                      "position": 0.0,
                      "label": "string",
                      "scope_type": "user",
                      "resource": "task",
                      "created_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified \u2014 `If-None-Match` matched the current `ETag` (no body)"
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-kind": "list",
        "x-scopes": [
          "tasks:read"
        ]
      }
    },
    "/v1/view-pins/projects/{project_id}": {
      "put": {
        "tags": [
          "view-pins"
        ],
        "summary": "Pin a project",
        "description": "Pin a project the caller may read.",
        "operationId": "view-pins.pin_project",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Org Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinOut"
                },
                "example": {
                  "pin_type": "view",
                  "pin_id": "string",
                  "org_id": "string",
                  "position": 0.0,
                  "label": "string",
                  "scope_type": "user",
                  "resource": "task",
                  "created_at": "2026-09-25T12:00:00Z"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      },
      "delete": {
        "tags": [
          "view-pins"
        ],
        "summary": "Unpin a project",
        "operationId": "view-pins.unpin_project",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Project Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Acknowledgement"
                },
                "example": {
                  "ok": true
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ],
        "description": "Unpin a project."
      }
    },
    "/v1/view-pins/order": {
      "put": {
        "tags": [
          "view-pins"
        ],
        "summary": "Reorder your pins",
        "description": "Set the order of your pins (their positions become 1, 2, 3, \u2026). Pins you do not name keep their relative order after the named ones.",
        "operationId": "view-pins.reorder",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PinOrder"
              },
              "example": {
                "org_id": "string",
                "pins": [
                  {
                    "pin_type": "view",
                    "pin_id": "string"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinListPage"
                },
                "example": {
                  "data": [
                    {
                      "pin_type": "view",
                      "pin_id": "string",
                      "org_id": "string",
                      "position": 0.0,
                      "label": "string",
                      "scope_type": "user",
                      "resource": "task",
                      "created_at": "2026-09-25T12:00:00Z"
                    }
                  ],
                  "next_cursor": "string"
                }
              }
            }
          },
          "422": {
            "description": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
                  "status": 422,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "400": {
            "description": "Bad request \u2014 a query parameter outside what the operation accepts (`invalid-parameter`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Bad request",
                  "status": 400,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid bearer token",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Missing or invalid bearer token",
                  "status": 401,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated, but not allowed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Authenticated, but not allowed",
                  "status": 403,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Not found",
                  "status": 404,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "409": {
            "description": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
                  "status": 409,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "412": {
            "description": "`If-Match` does not match the current `ETag`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "`If-Match` does not match the current `ETag`",
                  "status": 412,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "429": {
            "description": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
                  "status": 429,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error \u2014 quote `request_id`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "about:blank",
                  "title": "Unexpected server error",
                  "status": 500,
                  "detail": "\u2026",
                  "instance": "/v1/\u2026",
                  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "security": [
          {
            "bearerAuth": []
          },
          {
            "TasksMateToken": []
          }
        ],
        "x-scopes": [
          "tasks:write"
        ]
      }
    },
    "/.well-known/oauth-authorization-server": {
      "get": {
        "tags": [
          "oauth"
        ],
        "summary": "Authorization server metadata (RFC 8414)",
        "description": "Authorization server metadata (RFC 8414): the endpoints, scopes, grant types and PKCE method.",
        "operationId": "oauth.server_metadata",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthorizationServerMetadata"
                },
                "example": {
                  "issuer": "string",
                  "authorization_endpoint": "string",
                  "token_endpoint": "string",
                  "revocation_endpoint": "string",
                  "scopes_supported": [
                    "string"
                  ],
                  "response_types_supported": [
                    "string"
                  ],
                  "response_modes_supported": [
                    "string"
                  ],
                  "grant_types_supported": [
                    "string"
                  ],
                  "code_challenge_methods_supported": [
                    "string"
                  ],
                  "token_endpoint_auth_methods_supported": [
                    "string"
                  ],
                  "revocation_endpoint_auth_methods_supported": [
                    "string"
                  ],
                  "service_documentation": "string"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "x-kind": "oauth",
        "security": []
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "tags": [
          "oauth"
        ],
        "summary": "Protected resource metadata (RFC 9728)",
        "description": "Protected resource metadata (RFC 9728): which authorization server issues tokens for this API.",
        "operationId": "oauth.resource_metadata",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProtectedResourceMetadata"
                },
                "example": {
                  "resource": "string",
                  "authorization_servers": [
                    "string"
                  ],
                  "scopes_supported": [
                    "string"
                  ],
                  "bearer_methods_supported": [
                    "string"
                  ],
                  "resource_documentation": "string"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "x-kind": "oauth",
        "security": []
      }
    },
    "/oauth/authorize": {
      "get": {
        "tags": [
          "oauth"
        ],
        "summary": "Start an authorization: sign-in and consent, then back to the app",
        "description": "Start an authorization: the person signs in to TasksMate, picks the organization and approves the scopes; the\nbrowser then returns to `redirect_uri` with `code` and `state` (or `error` and `state`).",
        "operationId": "oauth.authorize",
        "parameters": [
          {
            "name": "response_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Must be `code`",
              "title": "Response Type"
            },
            "description": "Must be `code`"
          },
          {
            "name": "client_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The app's `tmc_\u2026` id",
              "title": "Client Id"
            },
            "description": "The app's `tmc_\u2026` id"
          },
          {
            "name": "redirect_uri",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exactly one of the app's registered redirect URIs",
              "title": "Redirect Uri"
            },
            "description": "Exactly one of the app's registered redirect URIs"
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Space-separated scopes, within the app's allowed scopes",
              "title": "Scope"
            },
            "description": "Space-separated scopes, within the app's allowed scopes"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Required: an opaque value returned unchanged",
              "title": "State"
            },
            "description": "Required: an opaque value returned unchanged"
          },
          {
            "name": "code_challenge",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Required: base64url(SHA-256(code_verifier)), 43 characters",
              "title": "Code Challenge"
            },
            "description": "Required: base64url(SHA-256(code_verifier)), 43 characters"
          },
          {
            "name": "code_challenge_method",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Must be `S256`",
              "title": "Code Challenge Method"
            },
            "description": "Must be `S256`"
          }
        ],
        "responses": {
          "302": {
            "description": "To the consent screen, or back to the app with `error` and `state`"
          },
          "400": {
            "description": "An HTML error page: unknown app or unregistered redirect URI (never redirected)",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                },
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "string"
                      ],
                      "msg": "string",
                      "type": "string",
                      "ctx": {}
                    }
                  ]
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "x-kind": "oauth",
        "security": []
      }
    },
    "/oauth/token": {
      "post": {
        "tags": [
          "oauth"
        ],
        "summary": "Exchange a code or a refresh token for tokens",
        "description": "Exchange an authorization code (with its PKCE verifier) or a refresh token for an access token and a new\nrefresh token. Errors are OAuth JSON (`error`, `error_description`).",
        "operationId": "oauth.token",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "enum": [
                      "authorization_code",
                      "refresh_token"
                    ]
                  },
                  "code": {
                    "type": "string",
                    "description": "authorization_code: the code from the redirect"
                  },
                  "redirect_uri": {
                    "type": "string",
                    "description": "authorization_code: exactly the one in the authorization request"
                  },
                  "code_verifier": {
                    "type": "string",
                    "description": "authorization_code: the PKCE verifier (43-128 characters)"
                  },
                  "refresh_token": {
                    "type": "string",
                    "description": "refresh_token: the current refresh token (single use)"
                  },
                  "scope": {
                    "type": "string",
                    "description": "refresh_token: optional, narrower scopes (space-separated)"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "Required for a public app; a confidential app may send it with `client_secret` instead of HTTP Basic"
                  },
                  "client_secret": {
                    "type": "string",
                    "description": "`client_secret_post` (or use HTTP Basic)"
                  }
                },
                "type": "object",
                "required": [
                  "grant_type"
                ],
                "title": "TokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                },
                "example": {
                  "access_token": "tm_live_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
                  "expires_in": 3600,
                  "refresh_token": "tmr_Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0RAb3xQ9eLr0v2",
                  "scope": "tasks:write projects:read",
                  "token_type": "Bearer"
                }
              }
            }
          },
          "400": {
            "description": "An OAuth error (`invalid_request`, `invalid_grant`, `invalid_scope`, `unsupported_grant_type`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthErrorBody"
                },
                "example": {
                  "error": "invalid_grant",
                  "error_description": "string"
                }
              }
            }
          },
          "401": {
            "description": "Client authentication failed (`invalid_client`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthErrorBody"
                },
                "example": {
                  "error": "invalid_grant",
                  "error_description": "string"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "x-kind": "oauth",
        "security": []
      }
    },
    "/oauth/revoke": {
      "post": {
        "tags": [
          "oauth"
        ],
        "summary": "Revoke a refresh token or an access token (RFC 7009)",
        "description": "Revoke a refresh token (its whole family and the connection's access tokens) or an access token (RFC 7009).",
        "operationId": "oauth.revoke",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "properties": {
                  "token": {
                    "type": "string",
                    "description": "A refresh token (`tmr_\u2026`) or an access token (`tm_live_\u2026`)"
                  },
                  "token_type_hint": {
                    "type": "string",
                    "enum": [
                      "refresh_token",
                      "access_token"
                    ]
                  },
                  "client_id": {
                    "type": "string",
                    "description": "Required for a public app; a confidential app may send it with `client_secret` instead of HTTP Basic"
                  },
                  "client_secret": {
                    "type": "string",
                    "description": "`client_secret_post` (or use HTTP Basic)"
                  }
                },
                "type": "object",
                "required": [
                  "token"
                ],
                "title": "RevokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Revoked, or nothing to revoke (always 200 for a known app)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {}
              }
            }
          },
          "400": {
            "description": "An OAuth error (`invalid_request`, `invalid_grant`, `invalid_scope`, `unsupported_grant_type`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthErrorBody"
                },
                "example": {
                  "error": "invalid_grant",
                  "error_description": "string"
                }
              }
            }
          },
          "401": {
            "description": "Client authentication failed (`invalid_client`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OAuthErrorBody"
                },
                "example": {
                  "error": "invalid_grant",
                  "error_description": "string"
                }
              }
            }
          }
        },
        "x-decision": "public",
        "x-public": true,
        "x-kind": "oauth",
        "security": []
      }
    }
  },
  "components": {
    "schemas": {
      "AccessReview": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "generated_at": {
            "type": "string",
            "title": "Generated At"
          },
          "members": {
            "items": {
              "$ref": "#/components/schemas/ReviewMember"
            },
            "type": "array",
            "title": "Members"
          },
          "unattached_tokens": {
            "items": {
              "$ref": "#/components/schemas/UnattachedToken"
            },
            "type": "array",
            "title": "Unattached Tokens",
            "description": "Active tokens whose principal is no longer an active member"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "generated_at",
          "members"
        ],
        "title": "AccessReview",
        "description": "Returned by `organizations.access_review`."
      },
      "Acknowledgement": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "Always true on a 2xx"
          }
        },
        "type": "object",
        "required": [
          "ok"
        ],
        "title": "Acknowledgement",
        "description": "A bare acknowledgement: the operation happened; there is nothing else to say.",
        "example": {
          "ok": true
        }
      },
      "AuditPage": {
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "AuditPage",
        "description": "A page of the audit log, newest first: `{data, next_cursor}`."
      },
      "AuthorizationServerMetadata": {
        "properties": {
          "issuer": {
            "type": "string",
            "title": "Issuer"
          },
          "authorization_endpoint": {
            "type": "string",
            "title": "Authorization Endpoint"
          },
          "token_endpoint": {
            "type": "string",
            "title": "Token Endpoint"
          },
          "revocation_endpoint": {
            "type": "string",
            "title": "Revocation Endpoint"
          },
          "scopes_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes Supported"
          },
          "response_types_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Response Types Supported"
          },
          "response_modes_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Response Modes Supported"
          },
          "grant_types_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Grant Types Supported"
          },
          "code_challenge_methods_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Code Challenge Methods Supported"
          },
          "token_endpoint_auth_methods_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Token Endpoint Auth Methods Supported"
          },
          "revocation_endpoint_auth_methods_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Revocation Endpoint Auth Methods Supported"
          },
          "service_documentation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Service Documentation"
          }
        },
        "type": "object",
        "required": [
          "issuer",
          "authorization_endpoint",
          "token_endpoint",
          "revocation_endpoint",
          "scopes_supported",
          "response_types_supported",
          "response_modes_supported",
          "grant_types_supported",
          "code_challenge_methods_supported",
          "token_endpoint_auth_methods_supported",
          "revocation_endpoint_auth_methods_supported"
        ],
        "title": "AuthorizationServerMetadata",
        "description": "Returned by `oauth.server_metadata`."
      },
      "AvailabilityCreate": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id",
            "description": "The person who is away \u2014 must be an active member of THIS team (422 otherwise)"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date",
            "description": "First unavailable day"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date",
            "description": "Last unavailable day (INCLUSIVE). Not earlier than start_date (422)."
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "Optional, at most 200 characters"
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "start_date",
          "end_date"
        ],
        "title": "AvailabilityCreate",
        "description": "The request body of `availability.create`."
      },
      "AvailabilityDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "entry_id": {
            "type": "string",
            "title": "Entry Id"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "entry_id"
        ],
        "title": "AvailabilityDeleted",
        "description": "Returned by `availability.delete`."
      },
      "AvailabilityEntry": {
        "properties": {
          "entry_id": {
            "type": "string",
            "title": "Entry Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "user_id": {
            "type": "string",
            "title": "User Id"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "entry_id",
          "org_id",
          "user_id",
          "start_date",
          "end_date"
        ],
        "title": "AvailabilityEntry",
        "description": "Returned by `availability.create` and `availability.update`."
      },
      "AvailabilityMember": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "team_role": {
            "type": "string",
            "title": "Team Role"
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "team_role"
        ],
        "title": "AvailabilityMember",
        "description": "A team member in an availability response \u2014 who the entries belong to."
      },
      "AvailabilityRange": {
        "properties": {
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "from": {
            "type": "string",
            "format": "date",
            "title": "From"
          },
          "to": {
            "type": "string",
            "format": "date",
            "title": "To"
          },
          "members": {
            "items": {
              "$ref": "#/components/schemas/AvailabilityMember"
            },
            "type": "array",
            "title": "Members"
          },
          "entries": {
            "items": {
              "$ref": "#/components/schemas/AvailabilityEntry"
            },
            "type": "array",
            "title": "Entries"
          }
        },
        "type": "object",
        "required": [
          "team_id",
          "from",
          "to",
          "members",
          "entries"
        ],
        "title": "AvailabilityRange",
        "description": "The team's active members and every unavailability entry of theirs that intersects `[from, to]`, in one response."
      },
      "AvailabilityUpdate": {
        "properties": {
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id",
            "description": "Accepted only when it equals the entry's own user_id (422 otherwise)"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          }
        },
        "type": "object",
        "title": "AvailabilityUpdate",
        "description": "A true partial. `user_id` is IMMUTABLE: sending a different one is a 422 \u2014 moving a day\noff between people is a delete plus a create, with two events."
      },
      "Body_upload_attachment_v1_task_attachments_post": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "is_inline": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Inline"
          },
          "file": {
            "type": "string",
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "format": "binary"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "file"
        ],
        "title": "Body_upload_attachment_v1_task_attachments_post",
        "description": "The request body of `task-attachments.create`."
      },
      "Body_upload_resource_v1_project_resources_upload_post": {
        "properties": {
          "project_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Name"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "file": {
            "type": "string",
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "format": "binary"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_resource_v1_project_resources_upload_post",
        "description": "The request body of `project-resources.upload`."
      },
      "CommitType": {
        "type": "string",
        "enum": [
          "feat",
          "fix",
          "docs",
          "style",
          "refactor",
          "perf",
          "test",
          "chore",
          "ci",
          "build",
          "revert"
        ],
        "title": "CommitType",
        "description": "One of `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`, `ci`, `build`, `revert`. Used by `ReleaseNoteItem`."
      },
      "ConnectedApp": {
        "properties": {
          "grant_id": {
            "type": "string",
            "title": "Grant Id"
          },
          "client_id": {
            "type": "string",
            "title": "Client Id"
          },
          "client_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Name"
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url"
          },
          "homepage_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage Url"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "org_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Name"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Connected on"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "Last token issued or refreshed"
          }
        },
        "type": "object",
        "required": [
          "grant_id",
          "client_id",
          "org_id",
          "scopes"
        ],
        "title": "ConnectedApp",
        "example": {
          "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
          "client_name": "Acme HR",
          "created_at": "2026-09-26T12:00:00Z",
          "grant_id": "tmg_Xy12Ab34Cd56",
          "homepage_url": "https://hr.example.com",
          "last_used_at": "2026-09-26T13:00:00Z",
          "org_id": "O0020",
          "org_name": "Indrasol",
          "scopes": [
            "tasks:write"
          ]
        },
        "description": "Part of `Page_ConnectedApp_`."
      },
      "ConnectedAppRevoked": {
        "properties": {
          "grant_id": {
            "type": "string",
            "title": "Grant Id"
          },
          "status": {
            "type": "string",
            "const": "revoked",
            "title": "Status",
            "default": "revoked"
          },
          "access_revoked": {
            "type": "integer",
            "title": "Access Revoked",
            "description": "How many of the app's live access tokens were revoked with it",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "grant_id"
        ],
        "title": "ConnectedAppRevoked",
        "description": "Returned by `connected-apps.delete`."
      },
      "DeliveryDetail": {
        "properties": {
          "delivery_id": {
            "type": "string",
            "title": "Delivery Id"
          },
          "subscription_id": {
            "type": "string",
            "title": "Subscription Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "event_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Event Id"
          },
          "event_type": {
            "type": "string",
            "title": "Event Type"
          },
          "attempt": {
            "type": "integer",
            "title": "Attempt"
          },
          "max_attempts": {
            "type": "integer",
            "title": "Max Attempts"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "in_flight",
              "succeeded",
              "failed",
              "dead"
            ],
            "title": "Status"
          },
          "next_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Attempt At",
            "description": "Set while a retry is scheduled"
          },
          "response_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Status"
          },
          "response_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Ms"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "resolved_ip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolved Ip",
            "description": "The address the last attempt connected to"
          },
          "replay_of": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Replay Of"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "payload": {
            "additionalProperties": true,
            "type": "object",
            "title": "Payload",
            "description": "The body as sent"
          },
          "request_headers": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Request Headers",
            "description": "The last attempt's headers; the signature's value is masked"
          },
          "response_excerpt": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Excerpt",
            "description": "\u2264 512 characters of the response body, secrets scrubbed"
          },
          "attempt_log": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Attempt Log",
            "description": "One entry per attempt: attempt, at, status, ms, outcome, error, resolved_ip, next_attempt_at"
          }
        },
        "type": "object",
        "required": [
          "delivery_id",
          "subscription_id",
          "org_id",
          "event_type",
          "attempt",
          "max_attempts",
          "status",
          "payload",
          "request_headers"
        ],
        "title": "DeliveryDetail",
        "description": "Returned by `webhooks.delivery` and `webhooks.test`."
      },
      "DeliveryOut": {
        "properties": {
          "delivery_id": {
            "type": "string",
            "title": "Delivery Id"
          },
          "subscription_id": {
            "type": "string",
            "title": "Subscription Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "event_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Event Id"
          },
          "event_type": {
            "type": "string",
            "title": "Event Type"
          },
          "attempt": {
            "type": "integer",
            "title": "Attempt"
          },
          "max_attempts": {
            "type": "integer",
            "title": "Max Attempts"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "in_flight",
              "succeeded",
              "failed",
              "dead"
            ],
            "title": "Status"
          },
          "next_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Attempt At",
            "description": "Set while a retry is scheduled"
          },
          "response_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Status"
          },
          "response_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Ms"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "resolved_ip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolved Ip",
            "description": "The address the last attempt connected to"
          },
          "replay_of": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Replay Of"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          }
        },
        "type": "object",
        "required": [
          "delivery_id",
          "subscription_id",
          "org_id",
          "event_type",
          "attempt",
          "max_attempts",
          "status"
        ],
        "title": "DeliveryOut",
        "description": "Returned by `webhooks.replay`."
      },
      "DependencyLink": {
        "properties": {
          "dependency_id": {
            "type": "string",
            "title": "Dependency Id",
            "description": "The task this one depends on (you need `read` on it)",
            "example": "T654321"
          }
        },
        "type": "object",
        "required": [
          "dependency_id"
        ],
        "title": "DependencyLink",
        "description": "The body of `POST /v1/tasks/{task_id}/dependencies`."
      },
      "Designation": {
        "properties": {
          "designation_id": {
            "type": "string",
            "title": "Designation Id"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "The human name"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Older alias of `label`. In a list it equals `label`; a single read returns the stored value, which may be the older fixed name."
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "null = a global (system) designation"
          },
          "is_system": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is System"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "aliases": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Aliases"
          },
          "pinned": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pinned",
            "description": "List only: listed first in its category for this org"
          },
          "hidden": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hidden",
            "description": "List only: not offered in this org's picker"
          },
          "legacy_value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Legacy Value",
            "description": "List only: the older fixed designation value this designation replaces, if any."
          },
          "usage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DesignationUsage"
              },
              {
                "type": "null"
              }
            ],
            "description": "List only, `with_usage=true`"
          },
          "slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slug"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "designation_id"
        ],
        "title": "Designation",
        "description": "A designation \u2014 global (`org_id` null, `is_system`) or the organization's own. The list adds the org's\n`pinned` / `hidden` and `legacy_value` (and `usage` with `with_usage=true`); a single read / write returns the\nstored row (`slug`, `metadata`, the audit columns).",
        "example": {
          "aliases": [
            "SWE",
            "SDE"
          ],
          "category": "Software Engineering",
          "designation_id": "DG0001",
          "hidden": false,
          "is_active": true,
          "is_system": true,
          "label": "Software Engineer",
          "name": "Software Engineer",
          "pinned": false,
          "sort_order": 1
        }
      },
      "DesignationCatalog": {
        "properties": {
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id"
          },
          "groups": {
            "items": {
              "$ref": "#/components/schemas/DesignationGroup"
            },
            "type": "array",
            "title": "Groups"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          }
        },
        "type": "object",
        "required": [
          "groups",
          "total"
        ],
        "title": "DesignationCatalog",
        "description": "`GET /v1/designations?grouped=true`: the designation catalog grouped by category, in one response (not paginated)."
      },
      "DesignationCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "The organization the row belongs to (org rows only; seeds are read-only)"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "The human name (unique per org, case-insensitive, among active rows)",
            "example": "Delivery Lead"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Alias of `label`, accepted from older clients."
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category",
            "description": "Group in the picker; defaults to 'Custom'"
          },
          "aliases": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Aliases",
            "description": "Other spellings the resolver accepts"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          }
        },
        "type": "object",
        "required": [
          "org_id"
        ],
        "title": "DesignationCreate",
        "description": "The request body of `designations.create`."
      },
      "DesignationDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "designation_id": {
            "type": "string",
            "title": "Designation Id"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "false: DELETE is a deactivate \u2014 existing assignments keep the row"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "designation_id",
          "is_active"
        ],
        "title": "DesignationDeleted",
        "description": "Returned by `designations.delete`."
      },
      "DesignationGroup": {
        "properties": {
          "category": {
            "type": "string",
            "title": "Category"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/Designation"
            },
            "type": "array",
            "title": "Items"
          }
        },
        "type": "object",
        "required": [
          "category",
          "items"
        ],
        "title": "DesignationGroup",
        "description": "Part of `DesignationCatalog`."
      },
      "DesignationUpdate": {
        "properties": {
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "aliases": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Aliases"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "false deactivates (what DELETE does); true re-activates"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          }
        },
        "type": "object",
        "title": "DesignationUpdate",
        "description": "The request body of `designations.replace` and `designations.update`."
      },
      "DesignationUsage": {
        "properties": {
          "members": {
            "type": "integer",
            "title": "Members",
            "default": 0
          },
          "invites": {
            "type": "integer",
            "title": "Invites",
            "default": 0
          },
          "project_members": {
            "type": "integer",
            "title": "Project Members",
            "default": 0
          },
          "total": {
            "type": "integer",
            "title": "Total",
            "default": 0
          }
        },
        "type": "object",
        "title": "DesignationUsage",
        "description": "Part of `Designation`."
      },
      "DesignationVisibility": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "designation_id": {
            "type": "string",
            "title": "Designation Id"
          },
          "hidden": {
            "type": "boolean",
            "title": "Hidden"
          },
          "pinned": {
            "type": "boolean",
            "title": "Pinned"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "designation_id",
          "hidden",
          "pinned"
        ],
        "title": "DesignationVisibility",
        "description": "An organization's hide / pin of one designation."
      },
      "Environment": {
        "type": "string",
        "enum": [
          "development",
          "uat",
          "production"
        ],
        "title": "Environment",
        "description": "One of `development`, `uat`, `production`. Used by `Release`."
      },
      "GoalCreate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "description": "The goal's name (1..200)."
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date",
            "description": "Optional. Passing it changes nothing in the data; the view shows it."
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "GoalCreate",
        "description": "The request body of `goals.create`."
      },
      "GoalDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "goal_id": {
            "type": "string",
            "title": "Goal Id"
          },
          "unfiled_tasks": {
            "type": "integer",
            "title": "Unfiled Tasks",
            "description": "Tasks the goal held; they stay in the project with `goal_id` null"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "goal_id",
          "unfiled_tasks"
        ],
        "title": "GoalDeleted",
        "description": "Returned by `goals.delete`."
      },
      "GoalMove": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id"
          }
        },
        "type": "object",
        "required": [
          "project_id"
        ],
        "title": "GoalMove",
        "description": "`POST \u2026/goals/{goal_id}/move` \u2014 the goal AND its tasks go to `project_id` (same org), all-or-nothing."
      },
      "GoalMoved": {
        "properties": {
          "goal_id": {
            "type": "string",
            "title": "Goal Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "position": {
            "type": "integer",
            "title": "Position",
            "default": 0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "open"
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "closed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed By"
          },
          "converted_from_task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Converted From Task Id",
            "description": "The id of the older goal-type task this goal was converted from; null for goals created as goals."
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "tasks_total": {
            "type": "integer",
            "title": "Tasks Total",
            "description": "Tasks under this goal the caller can read (subtasks excluded).",
            "default": 0
          },
          "tasks_completed": {
            "type": "integer",
            "title": "Tasks Completed",
            "description": "How many of them are `completed`.",
            "default": 0
          },
          "tasks": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tasks",
            "description": "Only with `include_tasks=true`: the goal's tasks, as the task list returns them."
          },
          "moved_tasks": {
            "type": "integer",
            "title": "Moved Tasks",
            "description": "Tasks that moved with the goal"
          }
        },
        "type": "object",
        "required": [
          "goal_id",
          "org_id",
          "project_id",
          "name",
          "moved_tasks"
        ],
        "title": "GoalMoved",
        "description": "The goal as it now reads in its new project, plus how many of its tasks moved with it."
      },
      "GoalOrder": {
        "properties": {
          "goal_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Goal Ids"
          }
        },
        "type": "object",
        "required": [
          "goal_ids"
        ],
        "title": "GoalOrder",
        "description": "`POST \u2026/goals/reorder` \u2014 the WHOLE order: every live goal of the project exactly once."
      },
      "GoalOut": {
        "properties": {
          "goal_id": {
            "type": "string",
            "title": "Goal Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "position": {
            "type": "integer",
            "title": "Position",
            "default": 0
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "open"
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "closed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed By"
          },
          "converted_from_task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Converted From Task Id",
            "description": "The id of the older goal-type task this goal was converted from; null for goals created as goals."
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "tasks_total": {
            "type": "integer",
            "title": "Tasks Total",
            "description": "Tasks under this goal the caller can read (subtasks excluded).",
            "default": 0
          },
          "tasks_completed": {
            "type": "integer",
            "title": "Tasks Completed",
            "description": "How many of them are `completed`.",
            "default": 0
          },
          "tasks": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tasks",
            "description": "Only with `include_tasks=true`: the goal's tasks, as the task list returns them."
          }
        },
        "type": "object",
        "required": [
          "goal_id",
          "org_id",
          "project_id",
          "name"
        ],
        "title": "GoalOut",
        "description": "Returned by `goals.create`, `goals.replace` and `goals.update`."
      },
      "GoalTaskUnfiled": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "goal_id": {
            "type": "string",
            "title": "Goal Id"
          },
          "task_id": {
            "type": "string",
            "title": "Task Id"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "goal_id",
          "task_id"
        ],
        "title": "GoalTaskUnfiled",
        "description": "Returned by `goals.unfile_task`."
      },
      "GoalTasksFile": {
        "properties": {
          "task_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 200,
            "minItems": 1,
            "title": "Task Ids"
          }
        },
        "type": "object",
        "required": [
          "task_ids"
        ],
        "title": "GoalTasksFile",
        "description": "`POST \u2026/goals/{goal_id}/tasks` \u2014 file existing tasks of THIS project under the goal (all-or-nothing)."
      },
      "GoalTasksFiled": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "goal_id": {
            "type": "string",
            "title": "Goal Id"
          },
          "filed": {
            "type": "integer",
            "title": "Filed",
            "description": "Tasks that changed (a task already under the goal is not counted)"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "goal_id",
          "filed"
        ],
        "title": "GoalTasksFiled",
        "description": "Returned by `goals.file_tasks`."
      },
      "GoalUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "One of: open, closed"
          }
        },
        "type": "object",
        "title": "GoalUpdate",
        "description": "A true partial \u2014 an absent field is left alone; `target_date` / `description` sent as null clear.\n`status` closes (`closed_at` / `closed_by` written) or re-opens (both cleared); neither touches the tasks."
      },
      "GoalsReordered": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "goal_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Goal Ids",
            "description": "The project's goals in their new order"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "goal_ids"
        ],
        "title": "GoalsReordered",
        "description": "Returned by `goals.reorder`."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError",
        "description": "A `HTTPValidationError` object."
      },
      "InviteStatusEnum": {
        "type": "string",
        "enum": [
          "pending",
          "expired",
          "cancelled",
          "accepted"
        ],
        "title": "InviteStatusEnum",
        "description": "Invite status enum"
      },
      "MeAuth": {
        "properties": {
          "kind": {
            "type": "string",
            "const": "token",
            "title": "Kind",
            "default": "token"
          },
          "token_id": {
            "type": "string",
            "title": "Token Id"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes",
            "description": "As granted (implications not expanded)"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids",
            "description": "null = every project the principal can reach"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "grant_type": {
            "type": "string",
            "enum": [
              "personal",
              "service_account",
              "authorization_code"
            ],
            "title": "Grant Type",
            "description": "personal \u00b7 service_account \u00b7 authorization_code (a third-party app acting for a person)",
            "default": "personal"
          },
          "token_kind": {
            "type": "string",
            "enum": [
              "live",
              "test"
            ],
            "title": "Token Kind",
            "default": "live"
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "The OAuth app the token was issued to (authorization_code); null otherwise"
          }
        },
        "type": "object",
        "required": [
          "token_id",
          "scopes"
        ],
        "title": "MeAuth",
        "description": "Present only when the request authenticated with an access token: the token's id, scopes, projects and expiry."
      },
      "MeOrganization": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "role": {
            "type": "string",
            "title": "Role",
            "description": "Org role: owner \u00b7 admin \u00b7 member \u00b7 guest"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "role"
        ],
        "title": "MeOrganization",
        "description": "Part of `MeOut`."
      },
      "MeOut": {
        "properties": {
          "principal": {
            "$ref": "#/components/schemas/MePrincipal"
          },
          "organizations": {
            "items": {
              "$ref": "#/components/schemas/MeOrganization"
            },
            "type": "array",
            "title": "Organizations",
            "description": "Active memberships, by name (a token: only its own organization)"
          },
          "auth": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MeAuth"
              },
              {
                "type": "null"
              }
            ],
            "description": "The access token behind this request; absent for a session token."
          }
        },
        "type": "object",
        "required": [
          "principal"
        ],
        "title": "MeOut",
        "example": {
          "organizations": [
            {
              "designation": "Engineering Manager",
              "name": "Indrasol",
              "org_id": "O0020",
              "role": "owner"
            }
          ],
          "principal": {
            "email": "ada@example.com",
            "email_verified": true,
            "id": "3f1c\u2026",
            "type": "user",
            "username": "ada"
          }
        },
        "description": "Returned by `me.read`."
      },
      "MePrincipal": {
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "user",
              "service_account"
            ],
            "title": "Type",
            "description": "What authenticated this request",
            "default": "user"
          },
          "id": {
            "type": "string",
            "title": "Id",
            "description": "The user id (Supabase `auth.users.id`)"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "email_verified": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email Verified"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "MePrincipal",
        "description": "Part of `MeOut`."
      },
      "Mention": {
        "properties": {
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          }
        },
        "type": "object",
        "title": "Mention",
        "description": "Part of `TaskCommentCreate` and `TaskCommentInDB`."
      },
      "MilestoneCreate": {
        "properties": {
          "title": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Title",
            "description": "Unique among the team's live milestones, open or closed (case-insensitive) \u2014 409 otherwise"
          },
          "target_date": {
            "type": "string",
            "format": "date",
            "title": "Target Date",
            "description": "The date the team commits to. Passing it changes nothing; the view shows it as overdue."
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "owner_user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner User Id",
            "description": "The one person accountable \u2014 an active member of THIS team (422 otherwise). They may close / re-open it."
          }
        },
        "type": "object",
        "required": [
          "title",
          "target_date"
        ],
        "title": "MilestoneCreate",
        "description": "The request body of `milestones.create`."
      },
      "MilestoneDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "milestone_id": {
            "type": "string",
            "title": "Milestone Id"
          },
          "unfiled_tasks": {
            "type": "integer",
            "title": "Unfiled Tasks",
            "description": "Tasks the milestone held; their `milestone_id` is now null"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "milestone_id",
          "unfiled_tasks"
        ],
        "title": "MilestoneDeleted",
        "description": "Returned by `milestones.delete`."
      },
      "MilestoneList": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/MilestoneOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          }
        },
        "type": "object",
        "required": [
          "data",
          "total"
        ],
        "title": "MilestoneList",
        "description": "Every live milestone of the team in ONE response \u2014 open first by target date, then\nclosed by when they were closed (latest first). Not paginated: a team's milestones are\ntens, not thousands."
      },
      "MilestoneOut": {
        "properties": {
          "milestone_id": {
            "type": "string",
            "title": "Milestone Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "target_date": {
            "type": "string",
            "format": "date",
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "owner_user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner User Id"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "open"
          },
          "closed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "closed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed By"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
          },
          "stop_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stop Id",
            "description": "The roadmap stop this milestone is pinned to (its tasks count toward that stop's progress); null when not pinned."
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "description": "Tasks filed under this milestone (every status, subtasks excluded).",
            "default": 0
          },
          "completed_count": {
            "type": "integer",
            "title": "Completed Count",
            "description": "How many of them are `completed` \u2014 the roll-up's done against total.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "milestone_id",
          "org_id",
          "team_id",
          "title",
          "target_date"
        ],
        "title": "MilestoneOut",
        "description": "Returned by `milestones.create` and `milestones.update`."
      },
      "MilestoneUpdate": {
        "properties": {
          "title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "owner_user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner User Id"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "One of: open, closed"
          }
        },
        "type": "object",
        "title": "MilestoneUpdate",
        "description": "A partial update: fields you leave out are unchanged.\n\n- `description` / `owner_user_id` sent as null clear them.\n- `status` closes or re-opens the milestone: closing records `closed_at` / `closed_by`, re-opening clears them.\n- The milestone's owner without team `edit` rights may send `status` only \u2014 anything else is a 403."
      },
      "OAuthClientCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "minLength": 1,
            "title": "Org Id",
            "description": "The organization that owns the app (you must be its owner or admin)"
          },
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "Shown to people on the consent screen",
            "examples": [
              "Acme HR"
            ]
          },
          "client_type": {
            "type": "string",
            "enum": [
              "confidential",
              "public"
            ],
            "title": "Client Type",
            "description": "`confidential`: a server that keeps a secret. `public`: a native or single-page app with no secret (PKCE only).",
            "default": "confidential"
          },
          "redirect_uris": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 10,
            "minItems": 1,
            "title": "Redirect Uris",
            "description": "Exact-match allow-list: https, or http on a loopback host (localhost, any port). No fragment.",
            "examples": [
              [
                "https://hr.example.com/oauth/callback"
              ]
            ]
          },
          "allowed_scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Allowed Scopes",
            "description": "The scopes the app may ask for: `tasks:read`, `tasks:write`, `projects:read`, `projects:write`, `teams:read`, `teams:write`, `org:read`, `org:write`, `webhooks:read`, `webhooks:write`, `admin`.",
            "examples": [
              [
                "tasks:write",
                "projects:read"
              ]
            ]
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url",
            "description": "https URL of a square logo"
          },
          "homepage_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage Url",
            "description": "https URL of the app's homepage"
          },
          "privacy_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Privacy Url",
            "description": "https URL of the app's privacy policy"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name",
          "redirect_uris",
          "allowed_scopes"
        ],
        "title": "OAuthClientCreate",
        "description": "The request body of `oauth-clients.create`."
      },
      "OAuthClientCreated": {
        "properties": {
          "client_id": {
            "type": "string",
            "title": "Client Id",
            "description": "Public identifier (`tmc_\u2026`)"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url"
          },
          "homepage_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage Url"
          },
          "privacy_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Privacy Url"
          },
          "redirect_uris": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Redirect Uris"
          },
          "client_type": {
            "type": "string",
            "enum": [
              "confidential",
              "public"
            ],
            "title": "Client Type"
          },
          "allowed_scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Allowed Scopes"
          },
          "registration": {
            "type": "string",
            "enum": [
              "developer",
              "dynamic"
            ],
            "title": "Registration",
            "default": "developer"
          },
          "review_state": {
            "type": "string",
            "enum": [
              "private",
              "listed"
            ],
            "title": "Review State",
            "description": "`private`: people outside your organization see an unreviewed-app warning when connecting",
            "default": "private"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "revoked"
            ],
            "title": "Status"
          },
          "grants_count": {
            "type": "integer",
            "title": "Grants Count",
            "description": "People connected to the app right now",
            "default": 0
          },
          "use_count": {
            "type": "integer",
            "title": "Use Count",
            "default": 0
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "Last API call with one of its tokens (updated at most once a minute)"
          },
          "secret_rotated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret Rotated At"
          },
          "previous_secret_expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Secret Expires At",
            "description": "After a rotation, the old secret works until then"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "revoked_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked By"
          },
          "client_secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Secret",
            "description": "THE SECRET (`tmcs_\u2026`) of a confidential app \u2014 shown once, never stored (only its SHA-256 is). null for a public app."
          }
        },
        "type": "object",
        "required": [
          "client_id",
          "org_id",
          "name",
          "redirect_uris",
          "client_type",
          "allowed_scopes",
          "status"
        ],
        "title": "OAuthClientCreated",
        "example": {
          "allowed_scopes": [
            "tasks:write",
            "projects:read"
          ],
          "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
          "client_secret": "tmcs_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
          "client_type": "confidential",
          "created_at": "2026-09-26T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "grants_count": 3,
          "homepage_url": "https://hr.example.com",
          "last_used_at": "2026-09-26T12:00:00Z",
          "name": "Acme HR",
          "org_id": "O0020",
          "redirect_uris": [
            "https://hr.example.com/oauth/callback"
          ],
          "registration": "developer",
          "review_state": "private",
          "status": "active",
          "updated_at": "2026-09-26T12:00:00Z",
          "use_count": 1204
        },
        "description": "Returned by `oauth-clients.create` and `oauth-clients.rotate_secret`."
      },
      "OAuthClientOut": {
        "properties": {
          "client_id": {
            "type": "string",
            "title": "Client Id",
            "description": "Public identifier (`tmc_\u2026`)"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url"
          },
          "homepage_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage Url"
          },
          "privacy_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Privacy Url"
          },
          "redirect_uris": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Redirect Uris"
          },
          "client_type": {
            "type": "string",
            "enum": [
              "confidential",
              "public"
            ],
            "title": "Client Type"
          },
          "allowed_scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Allowed Scopes"
          },
          "registration": {
            "type": "string",
            "enum": [
              "developer",
              "dynamic"
            ],
            "title": "Registration",
            "default": "developer"
          },
          "review_state": {
            "type": "string",
            "enum": [
              "private",
              "listed"
            ],
            "title": "Review State",
            "description": "`private`: people outside your organization see an unreviewed-app warning when connecting",
            "default": "private"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "revoked"
            ],
            "title": "Status"
          },
          "grants_count": {
            "type": "integer",
            "title": "Grants Count",
            "description": "People connected to the app right now",
            "default": 0
          },
          "use_count": {
            "type": "integer",
            "title": "Use Count",
            "default": 0
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "Last API call with one of its tokens (updated at most once a minute)"
          },
          "secret_rotated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret Rotated At"
          },
          "previous_secret_expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Secret Expires At",
            "description": "After a rotation, the old secret works until then"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "revoked_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked By"
          }
        },
        "type": "object",
        "required": [
          "client_id",
          "org_id",
          "name",
          "redirect_uris",
          "client_type",
          "allowed_scopes",
          "status"
        ],
        "title": "OAuthClientOut",
        "example": {
          "allowed_scopes": [
            "tasks:write",
            "projects:read"
          ],
          "client_id": "tmc_Q2x9eLr0v2Zk5n8WcHt1YpUo",
          "client_type": "confidential",
          "created_at": "2026-09-26T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "grants_count": 3,
          "homepage_url": "https://hr.example.com",
          "last_used_at": "2026-09-26T12:00:00Z",
          "name": "Acme HR",
          "org_id": "O0020",
          "redirect_uris": [
            "https://hr.example.com/oauth/callback"
          ],
          "registration": "developer",
          "review_state": "private",
          "status": "active",
          "updated_at": "2026-09-26T12:00:00Z",
          "use_count": 1204
        },
        "description": "Returned by `oauth-clients.delete`, `oauth-clients.read` and `oauth-clients.update`."
      },
      "OAuthClientUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Omit to leave it"
          },
          "redirect_uris": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 10,
                "minItems": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Redirect Uris",
            "description": "Replaces the allow-list"
          },
          "allowed_scopes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "minItems": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Allowed Scopes",
            "description": "Replaces the scopes the app may ask for. Existing connections keep theirs until they next refresh."
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url",
            "description": "null clears it"
          },
          "homepage_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Homepage Url",
            "description": "null clears it"
          },
          "privacy_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Privacy Url",
            "description": "null clears it"
          }
        },
        "type": "object",
        "title": "OAuthClientUpdate",
        "description": "The request body of `oauth-clients.update`."
      },
      "OAuthErrorBody": {
        "properties": {
          "error": {
            "type": "string",
            "title": "Error",
            "description": "invalid_request \u00b7 invalid_client \u00b7 invalid_grant \u00b7 unauthorized_client \u00b7 unsupported_grant_type \u00b7 invalid_scope",
            "examples": [
              "invalid_grant"
            ]
          },
          "error_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Description"
          }
        },
        "type": "object",
        "required": [
          "error"
        ],
        "title": "OAuthErrorBody",
        "description": "A `OAuthErrorBody` object."
      },
      "OrgCard": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID",
            "example": "O123456"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Organization name",
            "example": "Acme Corp"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "Description of the organization",
            "example": "A global tech company."
          },
          "role": {
            "type": "string",
            "title": "Role",
            "description": "Role of the current user in the organization",
            "default": "owner",
            "example": "owner"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "User's designation in the organization"
          },
          "project_count": {
            "type": "integer",
            "title": "Project Count",
            "description": "Number of projects under the organization",
            "default": 0
          },
          "member_count": {
            "type": "integer",
            "title": "Member Count",
            "description": "Number of members in the organization",
            "default": 0
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Username of the creator"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the organization was created"
          },
          "owners": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owners",
            "description": "List of usernames of the organization owners"
          },
          "is_invite": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Invite",
            "description": "Is Organization Invite"
          },
          "invitation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invitation Id",
            "description": "Invitation ID",
            "example": "O123456"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name"
        ],
        "title": "OrgCard",
        "description": "Simplified organization model for card display"
      },
      "OrgGoalsOut": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "projects": {
            "items": {
              "$ref": "#/components/schemas/ProjectGoalsOut"
            },
            "type": "array",
            "title": "Projects"
          },
          "total": {
            "type": "integer",
            "title": "Total",
            "description": "Number of goals across all groups.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "projects"
        ],
        "title": "OrgGoalsOut",
        "description": "`GET /v1/goals?org_id=`: every live goal in the projects you can read, grouped by project, each group with its goals' task totals. A readable project with no goals is absent."
      },
      "OrgJoinModeEnum": {
        "type": "string",
        "enum": [
          "instant",
          "approval"
        ],
        "title": "OrgJoinModeEnum",
        "description": "What a sign-in from one of the organization's verified domains gets: `instant` makes the person a member immediately; `approval` files a join request for an admin to decide."
      },
      "OrganizationInDB": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Organization name",
            "example": "Acme Corp"
          },
          "description": {
            "type": "string",
            "title": "Description",
            "description": "Description of the organization",
            "example": "A global tech company."
          },
          "designations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Designations",
            "description": "List of designation names available in this organization"
          },
          "logo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo",
            "description": "Logo URL",
            "example": "https://example.com/logo.png"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Contact email",
            "example": "info@acme.com"
          },
          "plan": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Plan",
            "description": "Subscription plan",
            "example": "pro"
          },
          "role": {
            "type": "string",
            "title": "Role",
            "description": "Role of the current user in the organization",
            "default": "owner"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "example": {
              "industry": "tech"
            }
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Single designation chosen during organization creation"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "is_deleted": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Deleted"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason"
          },
          "project_count": {
            "type": "integer",
            "title": "Project Count",
            "description": "Number of projects under the organization",
            "default": 0
          },
          "owners": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Owners",
            "description": "List of usernames of the organization owners"
          },
          "access_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Access Status"
          }
        },
        "type": "object",
        "required": [
          "name",
          "org_id"
        ],
        "title": "OrganizationInDB",
        "description": "Returned by `organizations.read`."
      },
      "OrganizationInviteCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "email": {
            "type": "string",
            "title": "Email",
            "description": "Invitee's email",
            "example": "invitee@example.com"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation ID (UUID)",
            "example": "d1e2f3g4-5678-1234-9abc-def012345678"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "Role ID (UUID)",
            "example": "r1e2f3g4-5678-1234-9abc-def012345678"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By",
            "description": "Inviter's User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "invite_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InviteStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Status of the invite",
            "default": "pending",
            "example": "pending"
          },
          "sent_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sent At",
            "description": "When the invite was sent"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At",
            "description": "When the invite expires"
          },
          "is_cancelled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Cancelled",
            "description": "Is the invite cancelled?",
            "default": false,
            "example": false
          },
          "cancel_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancel Date",
            "description": "When the invite was cancelled"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who updates the invite"
          },
          "org_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Name",
            "description": "Organization Name"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "email"
        ],
        "title": "OrganizationInviteCreate",
        "description": "The request body of `organization-invites.create`."
      },
      "OrganizationInviteInDB": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "email": {
            "type": "string",
            "title": "Email",
            "description": "Invitee's email",
            "example": "invitee@example.com"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation ID (UUID)",
            "example": "d1e2f3g4-5678-1234-9abc-def012345678"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "Role ID (UUID)",
            "example": "r1e2f3g4-5678-1234-9abc-def012345678"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By",
            "description": "Inviter's User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "invite_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InviteStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Status of the invite",
            "default": "pending",
            "example": "pending"
          },
          "sent_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sent At",
            "description": "When the invite was sent"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At",
            "description": "When the invite expires"
          },
          "is_cancelled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Cancelled",
            "description": "Is the invite cancelled?",
            "default": false,
            "example": false
          },
          "cancel_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancel Date",
            "description": "When the invite was cancelled"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who updates the invite"
          },
          "org_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Name",
            "description": "Organization Name"
          },
          "id": {
            "type": "string",
            "title": "Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Created timestamp"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last updated timestamp"
          },
          "accepted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted By",
            "description": "User who accepted the invite"
          },
          "accepted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At",
            "description": "When the invite was accepted"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "email",
          "id"
        ],
        "title": "OrganizationInviteInDB",
        "description": "Returned by `organization-invites.accept`, `organization-invites.create` and `organization-invites.update`."
      },
      "OrganizationInviteUpdate": {
        "properties": {
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation ID (UUID)",
            "example": "d1e2f3g4-5678-1234-9abc-def012345678"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "Role ID (UUID)",
            "example": "r1e2f3g4-5678-1234-9abc-def012345678"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By",
            "description": "Inviter's User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "invite_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InviteStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Status of the invite. Omit to leave it unchanged.",
            "example": "pending"
          },
          "sent_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sent At",
            "description": "When the invite was sent"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At",
            "description": "When the invite expires"
          },
          "is_cancelled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Cancelled",
            "description": "Whether the invite is cancelled. Omit to leave it unchanged.",
            "example": false
          },
          "cancel_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancel Date",
            "description": "When the invite was cancelled"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who updates the invite"
          }
        },
        "type": "object",
        "title": "OrganizationInviteUpdate",
        "description": "The request body of `organization-invites.update`."
      },
      "OrganizationMemberInDB": {
        "properties": {
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id",
            "description": "User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email",
            "description": "Invitee's email",
            "example": "invitee@example.com"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username",
            "description": "Invitee's username",
            "example": "invitee@example.com"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation ID (UUID)",
            "example": "d1e2f3g4-5678-1234-9abc-def012345678"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "Role ID (UUID)",
            "example": "r1e2f3g4-5678-1234-9abc-def012345678"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By",
            "description": "Inviter's User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the member active?",
            "default": true,
            "example": true
          },
          "invited_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited At",
            "description": "When the invite was sent"
          },
          "accepted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At",
            "description": "When the invite was accepted"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who updates the member"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last update timestamp"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the member was deleted"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "deleted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted By",
            "description": "Who deleted the member"
          },
          "last_active_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Active At",
            "description": "The member's last API request in this organization; null = never."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "`user` (a person) or `service_account` (a non-human member that holds access tokens).",
            "default": "user"
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "org_id",
          "email",
          "username"
        ],
        "title": "OrganizationMemberInDB",
        "description": "Returned by `organization-members.read`, `organization-members.replace` and `organization-members.update`."
      },
      "OrganizationMemberUpdate": {
        "properties": {
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation ID (UUID)",
            "example": "d1e2f3g4-5678-1234-9abc-def012345678"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "Role ID (UUID)",
            "example": "r1e2f3g4-5678-1234-9abc-def012345678"
          },
          "invited_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By",
            "description": "Inviter's User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Whether the member is active. Omit to leave it unchanged.",
            "example": true
          },
          "invited_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited At",
            "description": "When the invite was sent"
          },
          "accepted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At",
            "description": "When the invite was accepted"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who updates the member"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last update timestamp"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the member was deleted"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "deleted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted By",
            "description": "Who deleted the member"
          }
        },
        "type": "object",
        "title": "OrganizationMemberUpdate",
        "description": "The request body of `organization-members.replace` and `organization-members.update`."
      },
      "OrganizationSettingsOut": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "default_visibility": {
            "$ref": "#/components/schemas/ProjectVisibilityEnum",
            "default": "public"
          },
          "domain_join_mode": {
            "$ref": "#/components/schemas/OrgJoinModeEnum",
            "default": "approval"
          },
          "audit_retention_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Audit Retention Days",
            "description": "Audit log retention in days; null = keep forever"
          },
          "allow_personal_tokens": {
            "type": "boolean",
            "title": "Allow Personal Tokens",
            "description": "Members may mint personal access tokens.",
            "default": true
          },
          "max_token_ttl_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Token Ttl Days",
            "description": "The longest lifetime of a new token, in days; null = no cap."
          },
          "require_token_expiry": {
            "type": "boolean",
            "title": "Require Token Expiry",
            "description": "Every new token must carry an `expires_at`.",
            "default": false
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "is_default": {
            "type": "boolean",
            "title": "Is Default",
            "description": "True when the org has no settings row yet (these are the defaults)",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "org_id"
        ],
        "title": "OrganizationSettingsOut",
        "description": "Returned by `organizations.settings` and `organizations.update_settings`."
      },
      "OrganizationSettingsUpdate": {
        "properties": {
          "default_visibility": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectVisibilityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Visibility a new project gets when the request does not set one"
          },
          "domain_join_mode": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OrgJoinModeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "instant: a verified-domain sign-in becomes a member; approval: it files a join request (default)"
          },
          "audit_retention_days": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Audit Retention Days",
            "description": "Audit log retention in days; send null to keep events forever (the default)"
          },
          "allow_personal_tokens": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allow Personal Tokens",
            "description": "Whether members may mint personal access tokens (default true; service-account tokens are unaffected)."
          },
          "max_token_ttl_days": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 3650.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Token Ttl Days",
            "description": "The longest lifetime a new token may have, in days; send null for no cap (the default)."
          },
          "require_token_expiry": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Require Token Expiry",
            "description": "Whether every new token must carry an `expires_at` (default false)."
          }
        },
        "type": "object",
        "title": "OrganizationSettingsUpdate",
        "description": "`PUT /organizations/{org_id}/settings` body. Every field optional; omitted ones keep their value."
      },
      "Page_ConnectedApp_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ConnectedApp"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ConnectedApp]",
        "description": "Returned by `connected-apps.list`."
      },
      "Page_DeliveryOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DeliveryOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[DeliveryOut]",
        "description": "Returned by `webhooks.deliveries`."
      },
      "Page_Designation_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Designation"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[Designation]",
        "description": "Returned by `designations.list`."
      },
      "Page_OAuthClientOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OAuthClientOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[OAuthClientOut]",
        "description": "Returned by `oauth-clients.list`."
      },
      "Page_OrgCard_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OrgCard"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[OrgCard]",
        "description": "Returned by `organizations.list`."
      },
      "Page_OrganizationInviteInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OrganizationInviteInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[OrganizationInviteInDB]",
        "description": "Returned by `organization-invites.list` and `organization-invites.mine`."
      },
      "Page_OrganizationMemberInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OrganizationMemberInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[OrganizationMemberInDB]",
        "description": "Returned by `organization-members.list`."
      },
      "Page_ProjectCard_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ProjectCard"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ProjectCard]",
        "description": "Returned by `projects.list` and `views.rows`."
      },
      "Page_ProjectMemberInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ProjectMemberInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ProjectMemberInDB]",
        "description": "Returned by `project-members.list`."
      },
      "Page_ProjectResourceInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ProjectResourceInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ProjectResourceInDB]",
        "description": "Returned by `project-resources.list`."
      },
      "Page_SectionOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SectionOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[SectionOut]",
        "description": "Returned by `sections.list`."
      },
      "Page_ServiceAccountOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ServiceAccountOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ServiceAccountOut]",
        "description": "Returned by `service-accounts.list`."
      },
      "Page_TaskAttachmentInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TaskAttachmentInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TaskAttachmentInDB]",
        "description": "Returned by `task-attachments.list`."
      },
      "Page_TaskCommentInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TaskCommentInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TaskCommentInDB]",
        "description": "Returned by `task-comments.list`."
      },
      "Page_TaskHistoryInDB_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TaskHistoryInDB"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TaskHistoryInDB]",
        "description": "Returned by `task-history.list`."
      },
      "Page_TaskRoadmapStop_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TaskRoadmapStop"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TaskRoadmapStop]",
        "description": "Returned by `roadmap.task_stops`."
      },
      "Page_TokenOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TokenOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TokenOut]",
        "description": "Returned by `tokens.list`."
      },
      "Page_WebhookEventType_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/WebhookEventType"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[WebhookEventType]",
        "description": "Returned by `webhooks.events`."
      },
      "Page_WebhookOut_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/WebhookOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque token for the next page (send it back as `cursor`); null on the last page"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[WebhookOut]",
        "description": "Returned by `webhooks.list`."
      },
      "PinListPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/PinOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "PinListPage",
        "description": "Returned by `view-pins.list` and `view-pins.reorder`."
      },
      "PinOrder": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "pins": {
            "items": {
              "$ref": "#/components/schemas/PinRef"
            },
            "type": "array",
            "title": "Pins",
            "description": "Every pin of the caller in the org, in the wanted order (missing ones keep their place after these)"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "pins"
        ],
        "title": "PinOrder",
        "description": "The request body of `view-pins.reorder`."
      },
      "PinOut": {
        "properties": {
          "pin_type": {
            "$ref": "#/components/schemas/PinTypeEnum"
          },
          "pin_id": {
            "type": "string",
            "title": "Pin Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "position": {
            "type": "number",
            "title": "Position"
          },
          "label": {
            "type": "string",
            "title": "Label",
            "description": "The view's name or the project's name, resolved server-side"
          },
          "scope_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ViewScopeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "For a view pin: the view's scope"
          },
          "resource": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ViewResourceEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "For a view pin: the list the view queries, `task` or `project`. Empty for a project pin."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "pin_type",
          "pin_id",
          "org_id",
          "position",
          "label"
        ],
        "title": "PinOut",
        "description": "Returned by `view-pins.pin_project` and `view-pins.pin_view`."
      },
      "PinRef": {
        "properties": {
          "pin_type": {
            "$ref": "#/components/schemas/PinTypeEnum"
          },
          "pin_id": {
            "type": "string",
            "title": "Pin Id"
          }
        },
        "type": "object",
        "required": [
          "pin_type",
          "pin_id"
        ],
        "title": "PinRef",
        "description": "Part of `PinOrder`."
      },
      "PinTypeEnum": {
        "type": "string",
        "enum": [
          "view",
          "project"
        ],
        "title": "PinTypeEnum",
        "description": "One of `view`, `project`. Used by `PinOut` and 1 more."
      },
      "PriorityEnum": {
        "type": "string",
        "enum": [
          "high",
          "medium",
          "low",
          "none",
          "critical"
        ],
        "title": "PriorityEnum",
        "description": "Priority enum for projects and tasks"
      },
      "ProjectCard": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Project name",
            "example": "Website Redesign"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Project description",
            "example": "Redesign the company website."
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "example": {
              "budget": 10000
            }
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project status",
            "default": "not_started",
            "example": "not_started"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project priority",
            "default": "none",
            "example": "high"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-01"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date",
            "description": "End date",
            "example": "2024-12-31"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the project"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the project"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the project active?",
            "default": true,
            "example": true
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner",
            "description": "User name of the project owner"
          },
          "team_members": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Members",
            "description": "List of user names to add as members"
          },
          "visibility": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectVisibilityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "`public`: every member of the organization can see the project; `private`: only its members and org admins.",
            "default": "public",
            "example": "public"
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the project is filed under; it must be an active team of the same organization (422 otherwise). null = none."
          },
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID",
            "example": "P00001"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Timestamp when the project was created"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When the project was last changed."
          },
          "tasks_total": {
            "type": "integer",
            "title": "Tasks Total",
            "description": "Total number of tasks in the project",
            "example": 25
          },
          "tasks_completed": {
            "type": "integer",
            "title": "Tasks Completed",
            "description": "Number of completed tasks",
            "example": 15
          },
          "progress_percent": {
            "type": "number",
            "title": "Progress Percent",
            "description": "Project completion percentage, 0\u2013100.",
            "example": 60.0
          },
          "leads": {
            "items": {
              "$ref": "#/components/schemas/ProjectLeadOut"
            },
            "type": "array",
            "title": "Leads",
            "description": "The project's leads; optional, usually empty."
          },
          "position": {
            "type": "integer",
            "title": "Position",
            "description": "The project's place in the organization's manual order. Lists sort by position, then name.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name",
          "project_id",
          "tasks_total",
          "tasks_completed",
          "progress_percent"
        ],
        "title": "ProjectCard",
        "description": "Simplified project representation for dashboard cards."
      },
      "ProjectCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Project name",
            "example": "Website Redesign"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Project description",
            "example": "Redesign the company website."
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "example": {
              "budget": 10000
            }
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project status",
            "default": "not_started",
            "example": "not_started"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project priority",
            "default": "none",
            "example": "high"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-01"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date",
            "description": "End date",
            "example": "2024-12-31"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the project"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the project"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the project active?",
            "default": true,
            "example": true
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner",
            "description": "User name of the project owner"
          },
          "team_members": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Members",
            "description": "List of user names to add as members"
          },
          "visibility": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectVisibilityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "`public`: every member of the organization can see the project; `private`: only its members and org admins.",
            "default": "public",
            "example": "public"
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the project is filed under; it must be an active team of the same organization (422 otherwise). null = none."
          },
          "owner_designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Designation",
            "description": "Designation of the project owner",
            "example": "manager"
          },
          "team_member_designations": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/TeamMemberDesignation"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Member Designations",
            "description": "Designations for team members"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name"
        ],
        "title": "ProjectCreate",
        "description": "The request body of `projects.create`."
      },
      "ProjectGoalsOut": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/GoalOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "The next page's cursor; null on the last page."
          },
          "goals_tasks_total": {
            "type": "integer",
            "title": "Goals Tasks Total",
            "default": 0
          },
          "goals_tasks_completed": {
            "type": "integer",
            "title": "Goals Tasks Completed",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "data"
        ],
        "title": "ProjectGoalsOut",
        "description": "`GET /v1/projects/{project_id}/goals`: the project's live goals by position, plus project-level sums that count only the tasks filed under its goals."
      },
      "ProjectInDB": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (UUID)",
            "example": "a1b2c3d4-5678-1234-9abc-def012345678"
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Project name",
            "example": "Website Redesign"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Project description",
            "example": "Redesign the company website."
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "example": {
              "budget": 10000
            }
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project status",
            "default": "not_started",
            "example": "not_started"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Project priority",
            "default": "none",
            "example": "high"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-01"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date",
            "description": "End date",
            "example": "2024-12-31"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the project"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the project"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the project active?",
            "default": true,
            "example": true
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner",
            "description": "User name of the project owner"
          },
          "team_members": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Members",
            "description": "List of user names to add as members"
          },
          "visibility": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectVisibilityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "`public`: every member of the organization can see the project; `private`: only its members and org admins.",
            "default": "public",
            "example": "public"
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the project is filed under; it must be an active team of the same organization (422 otherwise). null = none."
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "editors_can_add_members": {
            "type": "boolean",
            "title": "Editors Can Add Members",
            "description": "When true, project editors may add and remove members and change their roles. Set by the project owner or an org admin.",
            "default": false
          },
          "leads": {
            "items": {
              "$ref": "#/components/schemas/ProjectLeadOut"
            },
            "type": "array",
            "title": "Leads",
            "description": "The project's leads (there can be several); optional, usually empty."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name",
          "project_id",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "ProjectInDB",
        "description": "Returned by `projects.read`, `projects.replace` and `projects.update`."
      },
      "ProjectLeadOut": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "assigned_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned By"
          },
          "assigned_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned At"
          }
        },
        "type": "object",
        "required": [
          "user_id"
        ],
        "title": "ProjectLeadOut",
        "description": "One lead of a project: who, who set them, and when. A lead is distinct from the owner \u2014 the owner administers the project, a lead is accountable for delivering it."
      },
      "ProjectMemberCreate": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "user_id": {
            "type": "string",
            "title": "User Id",
            "description": "User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username",
            "description": "Username of the member",
            "example": "john_doe"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation name",
            "example": "developer"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "The older role field (`owner` / `admin` / `member`); derived from `project_role` when omitted. Prefer `project_role`.",
            "example": "owner"
          },
          "project_role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRoleEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The member's role on the project; derived from `role` when omitted.",
            "example": "editor"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the membership (username)"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the membership (username)"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the member active?",
            "default": true,
            "example": true
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Creation timestamp"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last update timestamp"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the member was deleted"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "user_id"
        ],
        "title": "ProjectMemberCreate",
        "description": "The request body of `project-members.create`."
      },
      "ProjectMemberInDB": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "user_id": {
            "type": "string",
            "title": "User Id",
            "description": "User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username",
            "description": "Username of the member",
            "example": "john_doe"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation name",
            "example": "developer"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "The older role field (`owner` / `admin` / `member`); derived from `project_role` when omitted. Prefer `project_role`.",
            "example": "owner"
          },
          "project_role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRoleEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The member's role on the project; derived from `role` when omitted.",
            "example": "editor"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the membership (username)"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the membership (username)"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the member active?",
            "default": true,
            "example": true
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Creation timestamp"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last update timestamp"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the member was deleted"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "user_id"
        ],
        "title": "ProjectMemberInDB",
        "description": "Returned by `project-members.create`, `project-members.read`, `project-members.replace` and `project-members.update`."
      },
      "ProjectMemberUpdate": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Project ID (text) \u2014 the path's; optional in the body",
            "example": "project-1234"
          },
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id",
            "description": "User ID (UUID) \u2014 the path's; optional in the body",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username",
            "description": "Username of the member",
            "example": "john_doe"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Designation name",
            "example": "developer"
          },
          "designation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation Id",
            "description": "The designation's id (a global designation or the organization's own). Send this or `designation` (a name, label or alias); responses carry both.",
            "example": "DG0001"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "The older role field (`owner` / `admin` / `member`); derived from `project_role` when omitted. Prefer `project_role`.",
            "example": "owner"
          },
          "project_role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRoleEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The member's role on the project; derived from `role` when omitted.",
            "example": "editor"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the membership (username)"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the membership (username)"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Whether the member is active. Omit to leave it unchanged.",
            "example": true
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "Creation timestamp"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "Last update timestamp"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the member was deleted"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          }
        },
        "type": "object",
        "title": "ProjectMemberUpdate",
        "description": "The body of a project-member update. Every field is optional and omitted fields are left unchanged; `user_id` and `project_id` come from the path and need not be repeated."
      },
      "ProjectOrder": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "project_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Project Ids"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "project_ids"
        ],
        "title": "ProjectOrder",
        "description": "`POST /v1/projects/reorder` \u2014 `project_ids` in their new order. They are re-ordered among the slots they\nalready hold in the org's order; projects not listed keep theirs (a filtered view reorders its subset)."
      },
      "ProjectResourceCreate": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "project_name": {
            "type": "string",
            "title": "Project Name",
            "description": "Project name",
            "example": "Project 1"
          },
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "Resource name",
            "example": "API Docs"
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Url",
            "description": "Resource URL",
            "example": "https://example.com/api-docs.pdf"
          },
          "resource_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Type",
            "description": "Type of resource",
            "example": "pdf"
          },
          "storage_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Storage Path",
            "description": "Original File Storage Path"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the resource active?",
            "default": true,
            "example": true
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the resource"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the resource"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "project_name",
          "resource_name"
        ],
        "title": "ProjectResourceCreate",
        "description": "The request body of `project-resources.create`."
      },
      "ProjectResourceInDB": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "project_name": {
            "type": "string",
            "title": "Project Name",
            "description": "Project name",
            "example": "Project 1"
          },
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "Resource name",
            "example": "API Docs"
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Url",
            "description": "Resource URL",
            "example": "https://example.com/api-docs.pdf"
          },
          "resource_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Type",
            "description": "Type of resource",
            "example": "pdf"
          },
          "storage_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Storage Path",
            "description": "Original File Storage Path"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Is the resource active?",
            "default": true,
            "example": true
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the resource"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the resource"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason",
            "description": "Reason for deletion"
          },
          "resource_id": {
            "type": "string",
            "title": "Resource Id",
            "description": "Resource ID",
            "example": "RE0001"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At"
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "project_name",
          "resource_name",
          "resource_id",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "ProjectResourceInDB",
        "description": "Returned by `project-resources.create`, `project-resources.read`, `project-resources.update` and `project-resources.upload`."
      },
      "ProjectResourceUpdate": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "project_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Name"
          },
          "resource_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name"
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Url"
          },
          "resource_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Type"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason"
          }
        },
        "type": "object",
        "title": "ProjectResourceUpdate",
        "description": "The request body of `project-resources.update`."
      },
      "ProjectRoleEnum": {
        "type": "string",
        "enum": [
          "owner",
          "editor",
          "viewer"
        ],
        "title": "ProjectRoleEnum",
        "description": "A member's role on a project: `owner`, `editor` or `viewer`."
      },
      "ProjectStatsInDB": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id",
            "description": "Project ID",
            "example": "project-1234"
          },
          "tasks_total": {
            "type": "integer",
            "title": "Tasks Total",
            "description": "Total number of tasks in the project",
            "example": 25
          },
          "tasks_completed": {
            "type": "integer",
            "title": "Tasks Completed",
            "description": "Number of completed tasks",
            "example": 15
          },
          "progress_percent": {
            "type": "number",
            "title": "Progress Percent",
            "description": "Project completion percentage, 0\u2013100.",
            "example": 60.0
          },
          "team_members": {
            "type": "integer",
            "title": "Team Members",
            "description": "Number of members in the project",
            "example": 5
          },
          "days_left": {
            "type": "integer",
            "title": "Days Left",
            "description": "Days remaining until end_date",
            "example": 30
          },
          "duration_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Days",
            "description": "Project duration in days",
            "example": 120
          },
          "bugs_total": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bugs Total",
            "description": "Total number of bugs in the project",
            "example": 5
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "tasks_total",
          "tasks_completed",
          "progress_percent",
          "team_members",
          "days_left"
        ],
        "title": "ProjectStatsInDB",
        "description": "Returned by `project-stats.read`."
      },
      "ProjectStatusEnum": {
        "type": "string",
        "enum": [
          "planning",
          "in_progress",
          "not_started",
          "active",
          "completed",
          "archived",
          "on_hold",
          "blocked",
          "paused"
        ],
        "title": "ProjectStatusEnum",
        "description": "Project status enum"
      },
      "ProjectUpdate": {
        "properties": {
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectStatusEnum"
              },
              {
                "type": "null"
              }
            ]
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ]
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "delete_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delete Reason"
          },
          "owner": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner"
          },
          "team_members": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Members"
          },
          "visibility": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectVisibilityEnum"
              },
              {
                "type": "null"
              }
            ]
          },
          "editors_can_add_members": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Editors Can Add Members"
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id"
          },
          "owner_designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Designation"
          },
          "team_member_designations": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/TeamMemberDesignation"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Member Designations"
          }
        },
        "type": "object",
        "title": "ProjectUpdate",
        "description": "The request body of `projects.replace` and `projects.update`."
      },
      "ProjectVisibilityEnum": {
        "type": "string",
        "enum": [
          "public",
          "private"
        ],
        "title": "ProjectVisibilityEnum",
        "description": "Who can see a project: `public` \u2014 every member of the organization; `private` \u2014 the project's members and org admins. Also the organization's default for new projects."
      },
      "ProjectsReordered": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "project_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Project Ids",
            "description": "The organization's projects in their new order"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "org_id",
          "project_ids"
        ],
        "title": "ProjectsReordered",
        "description": "Returned by `projects.reorder`."
      },
      "ProtectedResourceMetadata": {
        "properties": {
          "resource": {
            "type": "string",
            "title": "Resource"
          },
          "authorization_servers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Authorization Servers"
          },
          "scopes_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes Supported"
          },
          "bearer_methods_supported": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Bearer Methods Supported"
          },
          "resource_documentation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Documentation"
          }
        },
        "type": "object",
        "required": [
          "resource",
          "authorization_servers",
          "scopes_supported",
          "bearer_methods_supported"
        ],
        "title": "ProtectedResourceMetadata",
        "description": "Returned by `oauth.resource_metadata`."
      },
      "Release": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "version": {
            "type": "string",
            "title": "Version"
          },
          "tag_name": {
            "type": "string",
            "title": "Tag Name"
          },
          "release_type": {
            "$ref": "#/components/schemas/ReleaseType"
          },
          "environment": {
            "$ref": "#/components/schemas/Environment"
          },
          "repository": {
            "type": "string",
            "title": "Repository"
          },
          "commit_sha": {
            "type": "string",
            "title": "Commit Sha"
          },
          "branch": {
            "type": "string",
            "title": "Branch"
          },
          "release_date": {
            "type": "string",
            "format": "date-time",
            "title": "Release Date"
          },
          "is_prerelease": {
            "type": "boolean",
            "title": "Is Prerelease",
            "default": false
          },
          "is_draft": {
            "type": "boolean",
            "title": "Is Draft",
            "default": false
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          },
          "release_notes": {
            "items": {
              "$ref": "#/components/schemas/ReleaseNoteItem"
            },
            "type": "array",
            "title": "Release Notes",
            "default": []
          },
          "summary": {
            "$ref": "#/components/schemas/ReleaseSummary"
          }
        },
        "type": "object",
        "required": [
          "id",
          "version",
          "tag_name",
          "release_type",
          "environment",
          "repository",
          "commit_sha",
          "branch",
          "release_date",
          "created_at",
          "updated_at",
          "summary"
        ],
        "title": "Release",
        "description": "Part of `WhatsNewResponse`."
      },
      "ReleaseNoteItem": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "commit_sha": {
            "type": "string",
            "title": "Commit Sha"
          },
          "commit_type": {
            "$ref": "#/components/schemas/CommitType"
          },
          "scope": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope"
          },
          "subject": {
            "type": "string",
            "title": "Subject"
          },
          "body": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Body"
          },
          "breaking_change": {
            "type": "boolean",
            "title": "Breaking Change",
            "default": false
          },
          "breaking_change_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Breaking Change Description"
          },
          "author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Name"
          },
          "author_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Email"
          },
          "commit_date": {
            "type": "string",
            "format": "date-time",
            "title": "Commit Date"
          },
          "pr_number": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Number"
          },
          "pr_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Title"
          },
          "pr_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pr Url"
          }
        },
        "type": "object",
        "required": [
          "id",
          "commit_sha",
          "commit_type",
          "subject",
          "commit_date"
        ],
        "title": "ReleaseNoteItem",
        "description": "Part of `Release`."
      },
      "ReleaseSummary": {
        "properties": {
          "features_count": {
            "type": "integer",
            "title": "Features Count",
            "default": 0
          },
          "fixes_count": {
            "type": "integer",
            "title": "Fixes Count",
            "default": 0
          },
          "breaking_changes_count": {
            "type": "integer",
            "title": "Breaking Changes Count",
            "default": 0
          },
          "total_commits": {
            "type": "integer",
            "title": "Total Commits",
            "default": 0
          }
        },
        "type": "object",
        "title": "ReleaseSummary",
        "description": "Part of `Release`."
      },
      "ReleaseType": {
        "type": "string",
        "enum": [
          "major",
          "minor",
          "patch",
          "prerelease"
        ],
        "title": "ReleaseType",
        "description": "One of `major`, `minor`, `patch`, `prerelease`. Used by `Release`."
      },
      "ReplyCreate": {
        "properties": {
          "content": {
            "type": "string",
            "title": "Content"
          },
          "parent_comment_id": {
            "type": "string",
            "title": "Parent Comment Id"
          }
        },
        "type": "object",
        "required": [
          "content",
          "parent_comment_id"
        ],
        "title": "ReplyCreate",
        "description": "The request body of `task-comments.reply`."
      },
      "ReviewMember": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "`user` or `service_account`"
          },
          "role": {
            "type": "string",
            "title": "Role"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation"
          },
          "last_active_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Active At"
          },
          "tokens": {
            "items": {
              "$ref": "#/components/schemas/ReviewToken"
            },
            "type": "array",
            "title": "Tokens",
            "description": "Tokens that authenticate right now"
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "kind",
          "role"
        ],
        "title": "ReviewMember",
        "description": "Part of `AccessReview`."
      },
      "ReviewToken": {
        "properties": {
          "token_id": {
            "type": "string",
            "title": "Token Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "token_prefix": {
            "type": "string",
            "title": "Token Prefix"
          },
          "kind": {
            "type": "string",
            "title": "Kind"
          },
          "grant_type": {
            "type": "string",
            "title": "Grant Type"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          }
        },
        "type": "object",
        "required": [
          "token_id",
          "name",
          "token_prefix",
          "kind",
          "grant_type",
          "scopes"
        ],
        "title": "ReviewToken",
        "description": "Part of `ReviewMember`."
      },
      "RoadmapJourneyOut": {
        "properties": {
          "journey_id": {
            "type": "string",
            "title": "Journey Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "color": {
            "type": "string",
            "title": "Color"
          },
          "position": {
            "type": "integer",
            "title": "Position"
          },
          "stops": {
            "items": {
              "$ref": "#/components/schemas/RoadmapStopOut"
            },
            "type": "array",
            "title": "Stops"
          }
        },
        "type": "object",
        "required": [
          "journey_id",
          "project_id",
          "name",
          "color",
          "position",
          "stops"
        ],
        "title": "RoadmapJourneyOut",
        "description": "Part of `RoadmapProjectOut`."
      },
      "RoadmapOut": {
        "properties": {
          "projects": {
            "items": {
              "$ref": "#/components/schemas/RoadmapProjectOut"
            },
            "type": "array",
            "title": "Projects"
          },
          "projects_without_roadmap": {
            "items": {
              "$ref": "#/components/schemas/RoadmapProjectRef"
            },
            "type": "array",
            "title": "Projects Without Roadmap"
          }
        },
        "type": "object",
        "required": [
          "projects",
          "projects_without_roadmap"
        ],
        "title": "RoadmapOut",
        "description": "A roadmap. A team's roadmap and a project's roadmap share this shape."
      },
      "RoadmapProjectOut": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id"
          },
          "can_edit": {
            "type": "boolean",
            "title": "Can Edit",
            "description": "The caller may create / rename / reorder / delete journeys and stops here (project owner / editor, org owner / admin).",
            "default": false
          },
          "journeys": {
            "items": {
              "$ref": "#/components/schemas/RoadmapJourneyOut"
            },
            "type": "array",
            "title": "Journeys"
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "name",
          "journeys"
        ],
        "title": "RoadmapProjectOut",
        "description": "Part of `RoadmapOut`."
      },
      "RoadmapProjectRef": {
        "properties": {
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "can_edit": {
            "type": "boolean",
            "title": "Can Edit",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "project_id",
          "name"
        ],
        "title": "RoadmapProjectRef",
        "description": "Part of `RoadmapOut`."
      },
      "RoadmapStopOut": {
        "properties": {
          "stop_id": {
            "type": "string",
            "title": "Stop Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "target_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "position": {
            "type": "integer",
            "title": "Position",
            "description": "Its position on THIS journey (a junction has one per line)."
          },
          "done": {
            "type": "integer",
            "title": "Done",
            "description": "Distinct visible tasks that are `completed`."
          },
          "total": {
            "type": "integer",
            "title": "Total",
            "description": "Distinct visible tasks \u2014 direct \u222a through pinned milestones, deduped by task_id."
          },
          "journey_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Journey Ids",
            "description": "Every live line this stop is on; two or more = a junction."
          },
          "milestone_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Milestone Ids",
            "description": "Live team milestones pinned to it."
          }
        },
        "type": "object",
        "required": [
          "stop_id",
          "project_id",
          "title",
          "position",
          "done",
          "total",
          "journey_ids"
        ],
        "title": "RoadmapStopOut",
        "description": "Part of `RoadmapJourneyOut`."
      },
      "ScopeRef": {
        "properties": {
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          }
        },
        "type": "object",
        "required": [
          "scope_type",
          "scope_id"
        ],
        "title": "ScopeRef",
        "description": "One (scope_type, scope_id) pair \u2014 a multi-scope read answers for a list of these."
      },
      "SectionCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (text)"
          },
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id",
            "description": "project_id for `project`; the caller's username for `user`; team_id for `team`"
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name"
          },
          "position": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Position",
            "description": "Omit to append at the end"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "scope_type",
          "scope_id",
          "name"
        ],
        "title": "SectionCreate",
        "description": "The request body of `sections.create`."
      },
      "SectionOut": {
        "properties": {
          "section_id": {
            "type": "string",
            "title": "Section Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "position": {
            "type": "number",
            "title": "Position"
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "default": 0
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "section_id",
          "org_id",
          "scope_type",
          "scope_id",
          "name",
          "position"
        ],
        "title": "SectionOut",
        "description": "Returned by `sections.create`, `sections.reorder` and `sections.update`."
      },
      "SectionReorder": {
        "properties": {
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          },
          "section_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Section Ids",
            "description": "Every section of the scope, in the new order"
          }
        },
        "type": "object",
        "required": [
          "scope_type",
          "scope_id",
          "section_ids"
        ],
        "title": "SectionReorder",
        "description": "The request body of `sections.reorder`."
      },
      "SectionScopeEnum": {
        "type": "string",
        "enum": [
          "project",
          "team",
          "user"
        ],
        "title": "SectionScopeEnum",
        "description": "One of `project`, `team`, `user`. Used by `ScopeRef` and 5 more."
      },
      "SectionUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "position": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Position"
          }
        },
        "type": "object",
        "title": "SectionUpdate",
        "description": "The request body of `sections.update`."
      },
      "SectionsForScopes": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SectionOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          },
          "scopes": {
            "items": {
              "$ref": "#/components/schemas/ScopeRef"
            },
            "type": "array",
            "title": "Scopes"
          }
        },
        "type": "object",
        "required": [
          "data",
          "scopes"
        ],
        "title": "SectionsForScopes",
        "description": "What `GET /v1/sections?scope_ids=\u2026` returns.\n\n- `data`: every requested scope's sections in one list; each row carries its own `scope_type` / `scope_id`.\n- `scopes`: the scopes this response answered for, in the order asked.\n- A scope you cannot read is **omitted from both**: missing from `scopes` means not yours; in `scopes` with no rows means no sections.\n- The single-scope form (`scope_id=`) returns the plain `{data, next_cursor}` list, without `scopes`."
      },
      "ServiceAccountCreate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "What the account is for, e.g. `CI bot`",
            "examples": [
              "CI bot"
            ]
          },
          "designation": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Optional designation (id, name or label), as for any member"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "ServiceAccountCreate",
        "description": "The request body of `service-accounts.create`."
      },
      "ServiceAccountOut": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id",
            "description": "The service account's principal id (its user id)."
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Its display name"
          },
          "username": {
            "type": "string",
            "title": "Username",
            "description": "`sa-<slug>`: fixed at creation (tasks reference it)"
          },
          "email": {
            "type": "string",
            "title": "Email",
            "description": "`<slug>@service.<org_id>.tasksmate.invalid` \u2014 syntactically valid, never deliverable"
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "Always `service_account`",
            "default": "service_account"
          },
          "role": {
            "type": "string",
            "title": "Role",
            "description": "Always `member`: a service account is never owner / admin",
            "default": "member"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "false once deactivated (its tokens were revoked then)",
            "default": true
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "active_tokens": {
            "type": "integer",
            "title": "Active Tokens",
            "description": "Tokens of this account that authenticate right now",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "org_id",
          "username",
          "email"
        ],
        "title": "ServiceAccountOut",
        "example": {
          "active_tokens": 1,
          "created_at": "2026-09-25T12:00:00Z",
          "email": "ci-bot@service.o0020.tasksmate.invalid",
          "is_active": true,
          "kind": "service_account",
          "name": "CI bot",
          "org_id": "O0020",
          "role": "member",
          "user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "username": "sa-ci-bot"
        },
        "description": "Returned by `service-accounts.create`, `service-accounts.delete` and `service-accounts.update`."
      },
      "ServiceAccountUpdate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "The new name (the username never changes)"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "ServiceAccountUpdate",
        "description": "The request body of `service-accounts.update`."
      },
      "SprintCreate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "description": "Unique among the team's active sprints (case-insensitive) \u2014 409 otherwise"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "goal": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal",
            "description": "What the sprint is for, in the team's words. Free text; nothing is derived from it."
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date",
            "description": "First day of the time box"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date",
            "description": "Last day of the time box (inclusive). Exactly one of `end_date` / `duration_weeks` is required; both is a 422."
          },
          "duration_weeks": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 52.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Weeks",
            "description": "Convenience: the end date is derived as start + 7*weeks - 1. The server stores the END DATE, never this."
          }
        },
        "type": "object",
        "required": [
          "name",
          "start_date"
        ],
        "title": "SprintCreate",
        "description": "The request body of `sprints.create`."
      },
      "SprintDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "sprint_id": {
            "type": "string",
            "title": "Sprint Id"
          },
          "unfiled_tasks": {
            "type": "integer",
            "title": "Unfiled Tasks",
            "description": "Tasks the sprint held; their `sprint_id` is now null"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "sprint_id",
          "unfiled_tasks"
        ],
        "title": "SprintDeleted",
        "description": "Returned by `sprints.delete`."
      },
      "SprintListPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SprintOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          }
        },
        "type": "object",
        "required": [
          "data",
          "total"
        ],
        "title": "SprintListPage",
        "description": "Returned by `sprints.list`."
      },
      "SprintOut": {
        "properties": {
          "sprint_id": {
            "type": "string",
            "title": "Sprint Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "goal": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date"
          },
          "status": {
            "type": "string",
            "title": "Status",
            "default": "active"
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "completed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed By"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
          },
          "duration_weeks": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Weeks",
            "description": "Derived: whole weeks between start and end inclusive, or null when the range is not a whole number of weeks (a custom sprint)."
          },
          "duration_label": {
            "type": "string",
            "title": "Duration Label",
            "description": "Derived: '2 weeks' for a preset length, 'Custom' otherwise.",
            "default": ""
          },
          "task_count": {
            "type": "integer",
            "title": "Task Count",
            "description": "Tasks filed into this sprint (every status).",
            "default": 0
          },
          "completed_count": {
            "type": "integer",
            "title": "Completed Count",
            "description": "How many of them are completed \u2014 the sprint header's done-against-total.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "sprint_id",
          "org_id",
          "team_id",
          "name",
          "start_date",
          "end_date"
        ],
        "title": "SprintOut",
        "description": "Returned by `sprints.create` and `sprints.update`."
      },
      "SprintUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "goal": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "duration_weeks": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 52.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Weeks",
            "description": "Re-derives `end_date` from the (new or stored) start date. Sending it with `end_date` is a 422."
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "One of: active, completed. Completing a sprint does NOTHING to its tasks \u2014 they keep it and it reads as past."
          }
        },
        "type": "object",
        "title": "SprintUpdate",
        "description": "A true partial \u2014 every field optional; an absent field is left alone."
      },
      "SubtaskLink": {
        "properties": {
          "subtask_id": {
            "type": "string",
            "title": "Subtask Id",
            "description": "The task to link under this one (you need `read` on it)",
            "example": "T123456"
          }
        },
        "type": "object",
        "required": [
          "subtask_id"
        ],
        "title": "SubtaskLink",
        "description": "The body of `POST /v1/tasks/{task_id}/subtasks`."
      },
      "TaskAttachmentInDB": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "Task ID (text)",
            "example": "task-1234"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title",
            "description": "Attachment title",
            "example": "Design Doc"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Attachment file name",
            "example": "design.pdf"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Attachment URL",
            "example": "https://example.com/design.pdf"
          },
          "uploaded_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded By",
            "description": "Who uploaded the attachment"
          },
          "uploaded_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded At",
            "description": "When the attachment was uploaded"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the attachment was deleted"
          },
          "deleted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted By",
            "description": "Who deleted the attachment"
          },
          "is_inline": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Inline",
            "description": "Is the attachment inline?",
            "default": false,
            "example": false
          },
          "attachment_id": {
            "type": "string",
            "title": "Attachment Id"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "attachment_id"
        ],
        "title": "TaskAttachmentInDB",
        "description": "Returned by `task-attachments.create`, `task-attachments.read` and `task-attachments.update`."
      },
      "TaskAttachmentUpdate": {
        "properties": {
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id",
            "description": "Task ID (text) \u2014 optional in the body",
            "example": "task-1234"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title",
            "description": "Attachment title",
            "example": "Design Doc"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Attachment file name",
            "example": "design.pdf"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Attachment URL",
            "example": "https://example.com/design.pdf"
          },
          "uploaded_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded By",
            "description": "Who uploaded the attachment"
          },
          "uploaded_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded At",
            "description": "When the attachment was uploaded"
          },
          "deleted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted At",
            "description": "When the attachment was deleted"
          },
          "deleted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deleted By",
            "description": "Who deleted the attachment"
          },
          "is_inline": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Inline",
            "description": "Whether the attachment is shown inline. Omit to leave it unchanged.",
            "example": false
          }
        },
        "type": "object",
        "title": "TaskAttachmentUpdate",
        "description": "The body of an attachment update. Every field is optional and omitted fields are left unchanged; the attachment is the one in the path."
      },
      "TaskCardView": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (text)",
            "example": "org-1234"
          },
          "sub_tasks": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sub Tasks",
            "description": "List of sub-task IDs",
            "default": [],
            "example": [
              "task-5678"
            ]
          },
          "dependencies": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dependencies",
            "description": "List of dependency task IDs",
            "default": [],
            "example": [
              "task-4321"
            ]
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "Task title",
            "example": "Implement Login"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Task description",
            "example": "Implement OAuth2 login flow."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task status",
            "default": "not_started",
            "example": "not_started"
          },
          "assignee": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee",
            "description": "Assignee user name",
            "example": ""
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-31"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date",
            "description": "Due date",
            "example": "2024-08-01"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task priority",
            "default": "none",
            "example": "high"
          },
          "task_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskTypeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The kind of task: `task` (default), `bug` or `agent`. A label, not a permission.",
            "default": "task",
            "example": "task"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags",
            "description": "List of tags",
            "default": [],
            "example": [
              "backend",
              "auth"
            ]
          },
          "type_data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Data",
            "description": "Extra fields for the task's type. For a bug:\n\n- **Writable:** `bug_status`, `bug_kind`, `environment`, `steps_to_reproduce`, `expected_result`, `actual_result`, `recommendation`.\n- **Read-only:** `legacy_bug_id`, `tracker_id`, `reporter`, `estimated_time`, `actual_time`, `closed_at`.\n- A write merges into the stored object; a key sent as null is removed. `goal_*` keys are refused (422 naming the key)."
          },
          "metadata": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "default": [],
            "example": [
              {
                "field": "status",
                "new": "in_progress",
                "old": "not_started"
              }
            ]
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the task"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the task"
          },
          "is_subtask": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Subtask",
            "description": "Is Sub Task"
          },
          "bug_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bug Id",
            "description": "Bug ID (text)",
            "example": "B1234"
          },
          "tracker_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tracker Id",
            "description": "On create, for a bug only: the test tracker to file it under. Refused (422) for a task that is not a bug or a tracker of another project.",
            "example": "TR1234"
          },
          "restricted_to": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To",
            "description": "Usernames allowed on this task (empty = everyone with membership). Responses also carry `restricted_to_user_ids`.",
            "default": []
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the task is filed under. A task with a team and no project is in that team's intake. null = none."
          },
          "sprint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sprint Id",
            "description": "The team sprint this task is filed into. One per task; refused (422) unless the task is reachable from the sprint's team. null = none.",
            "example": "SP12345"
          },
          "milestone_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Milestone Id",
            "description": "The team milestone this task is filed under. One per task, independent of `sprint_id`; refused (422) unless the task is reachable from the milestone's team. null = none.",
            "example": "MS12345"
          },
          "goal_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal Id",
            "description": "The project goal this task is filed under. One per task; refused (422) unless it is a live goal of the task's own project. Moving the task to another project clears it. null = none.",
            "example": "G12345"
          },
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "restricted_to_user_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To User Ids",
            "description": "User ids allowed on this task; null when access is decided by the `restricted_to` usernames."
          },
          "comments": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comments"
          },
          "has_access": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Access",
            "description": "Whether the current user can access this task based on restrictions",
            "default": true
          },
          "has_edit_access": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Edit Access",
            "description": "True for task creator, project owner, or organization owner",
            "default": false
          },
          "section_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section Id",
            "description": "Section the task sits in for the requested `section_scope`, if any"
          },
          "section_position": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section Position",
            "description": "Position inside that section"
          }
        },
        "type": "object",
        "required": [
          "title",
          "task_id",
          "created_at",
          "updated_at",
          "comments"
        ],
        "title": "TaskCardView",
        "description": "Part of `TaskListPage`."
      },
      "TaskCommentCreate": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "Task ID (text)",
            "example": "task-1234"
          },
          "task_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Title",
            "description": "Task title snapshot at time of comment",
            "example": "Implement Login"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment",
            "description": "Legacy/alternative comment field"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content",
            "description": "Comment content",
            "example": "Looks good, but needs more tests."
          },
          "parent_comment_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Comment Id",
            "description": "ID of the parent comment if this is a reply"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the comment was created"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When the comment was last updated"
          },
          "mentions": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/Mention"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mentions",
            "description": "List of mentioned users details in the comment"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (UUID)"
          }
        },
        "type": "object",
        "required": [
          "task_id"
        ],
        "title": "TaskCommentCreate",
        "description": "The request body of `task-comments.create`."
      },
      "TaskCommentInDB": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "Task ID (text)",
            "example": "task-1234"
          },
          "task_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Title",
            "description": "Task title snapshot at time of comment",
            "example": "Implement Login"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "User ID (UUID)",
            "example": "b3c1e2d4-1234-5678-9abc-def012345678"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment",
            "description": "Legacy/alternative comment field"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content",
            "description": "Comment content",
            "example": "Looks good, but needs more tests."
          },
          "parent_comment_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Comment Id",
            "description": "ID of the parent comment if this is a reply"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the comment was created"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When the comment was last updated"
          },
          "mentions": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/Mention"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mentions",
            "description": "List of mentioned users details in the comment"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (UUID)"
          },
          "comment_id": {
            "type": "string",
            "title": "Comment Id"
          },
          "replies": {
            "items": {
              "$ref": "#/components/schemas/TaskCommentInDB"
            },
            "type": "array",
            "title": "Replies",
            "description": "List of reply comments"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "comment_id"
        ],
        "title": "TaskCommentInDB",
        "description": "Returned by `task-comments.create`, `task-comments.read`, `task-comments.reply` and `task-comments.update`."
      },
      "TaskCommentUpdate": {
        "properties": {
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id",
            "description": "Task ID (text)"
          },
          "task_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Title",
            "description": "Task title snapshot at time of comment"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "User ID (UUID)"
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment",
            "description": "Legacy/alternative comment field"
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content",
            "description": "Comment content"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the comment was created"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When the comment was last updated"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (UUID)"
          }
        },
        "type": "object",
        "title": "TaskCommentUpdate",
        "description": "The request body of `task-comments.update`."
      },
      "TaskCreate": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization ID (text)",
            "example": "org-1234"
          },
          "sub_tasks": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sub Tasks",
            "description": "List of sub-task IDs",
            "default": [],
            "example": [
              "task-5678"
            ]
          },
          "dependencies": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dependencies",
            "description": "List of dependency task IDs",
            "default": [],
            "example": [
              "task-4321"
            ]
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "Task title",
            "example": "Implement Login"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Task description",
            "example": "Implement OAuth2 login flow."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task status",
            "default": "not_started",
            "example": "not_started"
          },
          "assignee": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee",
            "description": "Assignee user name",
            "example": ""
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-31"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date",
            "description": "Due date",
            "example": "2024-08-01"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task priority",
            "default": "none",
            "example": "high"
          },
          "task_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskTypeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The kind of task: `task` (default), `bug` or `agent`. A label, not a permission.",
            "default": "task",
            "example": "task"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags",
            "description": "List of tags",
            "default": [],
            "example": [
              "backend",
              "auth"
            ]
          },
          "type_data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Data",
            "description": "Extra fields for the task's type. For a bug:\n\n- **Writable:** `bug_status`, `bug_kind`, `environment`, `steps_to_reproduce`, `expected_result`, `actual_result`, `recommendation`.\n- **Read-only:** `legacy_bug_id`, `tracker_id`, `reporter`, `estimated_time`, `actual_time`, `closed_at`.\n- A write merges into the stored object; a key sent as null is removed. `goal_*` keys are refused (422 naming the key)."
          },
          "metadata": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "default": [],
            "example": [
              {
                "field": "status",
                "new": "in_progress",
                "old": "not_started"
              }
            ]
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the task"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the task"
          },
          "is_subtask": {
            "type": "boolean",
            "title": "Is Subtask",
            "description": "Is Sub Task (default false; a subtask is linked through POST /tasks/{id}/subtasks)",
            "default": false
          },
          "bug_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bug Id",
            "description": "Bug ID (text)",
            "example": "B1234"
          },
          "tracker_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tracker Id",
            "description": "On create, for a bug only: the test tracker to file it under. Refused (422) for a task that is not a bug or a tracker of another project.",
            "example": "TR1234"
          },
          "restricted_to": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To",
            "description": "Usernames allowed on this task (empty = everyone with membership). Responses also carry `restricted_to_user_ids`.",
            "default": []
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the task is filed under. A task with a team and no project is in that team's intake. null = none."
          },
          "sprint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sprint Id",
            "description": "The team sprint this task is filed into. One per task; refused (422) unless the task is reachable from the sprint's team. null = none.",
            "example": "SP12345"
          },
          "milestone_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Milestone Id",
            "description": "The team milestone this task is filed under. One per task, independent of `sprint_id`; refused (422) unless the task is reachable from the milestone's team. null = none.",
            "example": "MS12345"
          },
          "goal_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal Id",
            "description": "The project goal this task is filed under. One per task; refused (422) unless it is a live goal of the task's own project. Moving the task to another project clears it. null = none.",
            "example": "G12345"
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "title"
        ],
        "title": "TaskCreate",
        "description": "The request body of `tasks.create`."
      },
      "TaskHistoryInDB": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id",
            "description": "Task ID (text)",
            "example": "task-1234"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title",
            "description": "History title",
            "example": "Initial Version"
          },
          "metadata": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "List of metadata JSON objects",
            "default": [],
            "example": [
              {
                "field": "status",
                "new": "in_progress",
                "old": "not_started"
              }
            ]
          },
          "hash_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hash Id",
            "description": "Hash ID for versioning",
            "example": "abc123hash"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At",
            "description": "When the history was last updated"
          },
          "history_id": {
            "type": "string",
            "title": "History Id"
          },
          "action": {
            "type": "string",
            "title": "Action",
            "description": "Action performed on the task",
            "example": "created"
          },
          "created_by": {
            "type": "string",
            "title": "Created By",
            "description": "User ID of the creator",
            "example": "user-1234"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When the history was created",
            "example": "2023-10-01T12:00:00Z"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "history_id",
          "action",
          "created_by"
        ],
        "title": "TaskHistoryInDB",
        "description": "Returned by `task-history.read`."
      },
      "TaskInDB": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (text)",
            "example": "org-1234"
          },
          "sub_tasks": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sub Tasks",
            "description": "List of sub-task IDs",
            "default": [],
            "example": [
              "task-5678"
            ]
          },
          "dependencies": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dependencies",
            "description": "List of dependency task IDs",
            "default": [],
            "example": [
              "task-4321"
            ]
          },
          "title": {
            "type": "string",
            "title": "Title",
            "description": "Task title",
            "example": "Implement Login"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Task description",
            "example": "Implement OAuth2 login flow."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task status",
            "default": "not_started",
            "example": "not_started"
          },
          "assignee": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee",
            "description": "Assignee user name",
            "example": ""
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-31"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date",
            "description": "Due date",
            "example": "2024-08-01"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task priority",
            "default": "none",
            "example": "high"
          },
          "task_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskTypeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The kind of task: `task` (default), `bug` or `agent`. A label, not a permission.",
            "default": "task",
            "example": "task"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags",
            "description": "List of tags",
            "default": [],
            "example": [
              "backend",
              "auth"
            ]
          },
          "type_data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Data",
            "description": "Extra fields for the task's type. For a bug:\n\n- **Writable:** `bug_status`, `bug_kind`, `environment`, `steps_to_reproduce`, `expected_result`, `actual_result`, `recommendation`.\n- **Read-only:** `legacy_bug_id`, `tracker_id`, `reporter`, `estimated_time`, `actual_time`, `closed_at`.\n- A write merges into the stored object; a key sent as null is removed. `goal_*` keys are refused (422 naming the key)."
          },
          "metadata": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "default": [],
            "example": [
              {
                "field": "status",
                "new": "in_progress",
                "old": "not_started"
              }
            ]
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the task"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the task"
          },
          "is_subtask": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Subtask",
            "description": "Is Sub Task"
          },
          "bug_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bug Id",
            "description": "Bug ID (text)",
            "example": "B1234"
          },
          "tracker_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tracker Id",
            "description": "On create, for a bug only: the test tracker to file it under. Refused (422) for a task that is not a bug or a tracker of another project.",
            "example": "TR1234"
          },
          "restricted_to": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To",
            "description": "Usernames allowed on this task (empty = everyone with membership). Responses also carry `restricted_to_user_ids`.",
            "default": []
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the task is filed under. A task with a team and no project is in that team's intake. null = none."
          },
          "sprint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sprint Id",
            "description": "The team sprint this task is filed into. One per task; refused (422) unless the task is reachable from the sprint's team. null = none.",
            "example": "SP12345"
          },
          "milestone_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Milestone Id",
            "description": "The team milestone this task is filed under. One per task, independent of `sprint_id`; refused (422) unless the task is reachable from the milestone's team. null = none.",
            "example": "MS12345"
          },
          "goal_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal Id",
            "description": "The project goal this task is filed under. One per task; refused (422) unless it is a live goal of the task's own project. Moving the task to another project clears it. null = none.",
            "example": "G12345"
          },
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "restricted_to_user_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To User Ids",
            "description": "User ids allowed on this task (authoritative when set; null = decided by `restricted_to` usernames). Response only."
          },
          "has_access": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Access",
            "description": "Whether the current user can access this task based on restrictions"
          },
          "has_edit_access": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Edit Access",
            "description": "True unless the task is restricted and the caller is neither listed creator/assignee nor an org admin"
          }
        },
        "type": "object",
        "required": [
          "title",
          "task_id",
          "created_at",
          "updated_at"
        ],
        "title": "TaskInDB",
        "description": "Returned by `tasks.add_dependency`, `tasks.add_subtask`, `tasks.create`, `tasks.read` and 7 more."
      },
      "TaskListPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TaskCardView"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Token for the next page, or null at the end"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "TaskListPage",
        "description": "A page of `GET /v1/tasks`. `next_cursor` is opaque: send it back as `cursor`; null means the last page. `data` may be empty while `next_cursor` is set (every task on that page was restricted) \u2014 keep following the cursor."
      },
      "TaskMilestoneSet": {
        "properties": {
          "milestone_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Milestone Id",
            "description": "The team milestone to file this task under, or null for none.",
            "example": "MS12345"
          }
        },
        "type": "object",
        "title": "TaskMilestoneSet",
        "description": "The body of `PUT /v1/tasks/{task_id}/milestone`: the team milestone to file the task under, or `null` to take it out."
      },
      "TaskProjectSet": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Target project, or null to remove the task from its project"
          }
        },
        "type": "object",
        "title": "TaskProjectSet",
        "description": "The body of `POST /v1/tasks/{task_id}/project`: the project to move the task to, or `project_id: null` to take it out of its project."
      },
      "TaskRoadmapStop": {
        "properties": {
          "stop_id": {
            "type": "string",
            "title": "Stop Id"
          },
          "project_id": {
            "type": "string",
            "title": "Project Id"
          },
          "title": {
            "type": "string",
            "title": "Title"
          },
          "via": {
            "type": "string",
            "title": "Via",
            "description": "`direct` (the task is attached to the stop) or `milestone` (through the task's pinned milestone)."
          },
          "journeys": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array",
            "title": "Journeys"
          }
        },
        "type": "object",
        "required": [
          "stop_id",
          "project_id",
          "title",
          "via",
          "journeys"
        ],
        "title": "TaskRoadmapStop",
        "description": "A roadmap stop a task is on."
      },
      "TaskSectionOut": {
        "properties": {
          "task_id": {
            "type": "string",
            "title": "Task Id"
          },
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          },
          "section_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section Id"
          },
          "position": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Position"
          }
        },
        "type": "object",
        "required": [
          "task_id",
          "scope_type",
          "scope_id",
          "section_id",
          "position"
        ],
        "title": "TaskSectionOut",
        "description": "Returned by `tasks.set_section`."
      },
      "TaskSectionSet": {
        "properties": {
          "scope_type": {
            "$ref": "#/components/schemas/SectionScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          },
          "section_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section Id"
          },
          "position": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Position",
            "description": "Omit to append at the end of the section"
          }
        },
        "type": "object",
        "required": [
          "scope_type",
          "scope_id"
        ],
        "title": "TaskSectionSet",
        "description": "`PUT /tasks/{task_id}/section`: `section_id: null` removes the task from its section in that scope."
      },
      "TaskSprintSet": {
        "properties": {
          "sprint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sprint Id",
            "description": "The team sprint to file this task into, or null for none.",
            "example": "SP12345"
          }
        },
        "type": "object",
        "title": "TaskSprintSet",
        "description": "The body of `PUT /v1/tasks/{task_id}/sprint`: the team sprint to file the task into, or `null` to take it out."
      },
      "TaskStatusEnum": {
        "type": "string",
        "enum": [
          "backlog",
          "not_started",
          "in_progress",
          "blocked",
          "completed",
          "archived",
          "on_hold"
        ],
        "title": "TaskStatusEnum",
        "description": "A task's status. `backlog` comes first wherever statuses are ordered (filters, grouping and the `status` sort); otherwise it is an ordinary status, accepted everywhere."
      },
      "TaskTypeEnum": {
        "type": "string",
        "enum": [
          "task",
          "bug",
          "agent"
        ],
        "title": "TaskTypeEnum",
        "description": "The kind of task: `task`, `bug` or `agent`, in sort order (`sort_by=task_type`).\n\n- A label, never a permission.\n- A goal is not a task type but a container of a project's tasks (`goal_id`): `task_type=goal` is refused on write (422) and in `filter[task_type]` (400)."
      },
      "TaskUpdate": {
        "properties": {
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id",
            "description": "Project ID (text)",
            "example": "project-1234"
          },
          "org_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Org Id",
            "description": "Organization ID (text)",
            "example": "org-1234"
          },
          "sub_tasks": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sub Tasks",
            "description": "List of sub-task IDs",
            "example": [
              "task-5678"
            ]
          },
          "dependencies": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dependencies",
            "description": "List of dependency task IDs",
            "example": [
              "task-4321"
            ]
          },
          "title": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Title",
            "description": "Task title. Omit to leave it; an explicit blank is refused (422).",
            "example": "Implement Login"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "description": "Task description",
            "example": "Implement OAuth2 login flow."
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskStatusEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task status",
            "example": "in_progress"
          },
          "assignee": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee",
            "description": "Assignee user name",
            "example": ""
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date",
            "description": "Start date",
            "example": "2024-07-31"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date",
            "description": "Due date",
            "example": "2024-08-01"
          },
          "priority": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PriorityEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Task priority",
            "example": "high"
          },
          "task_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskTypeEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The kind of task: `task`, `bug` or `agent`. A label, not a permission.",
            "example": "task"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags",
            "description": "List of tags",
            "example": [
              "backend",
              "auth"
            ]
          },
          "type_data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Data",
            "description": "Extra fields for the task's type. For a bug:\n\n- **Writable:** `bug_status`, `bug_kind`, `environment`, `steps_to_reproduce`, `expected_result`, `actual_result`, `recommendation`.\n- **Read-only:** `legacy_bug_id`, `tracker_id`, `reporter`, `estimated_time`, `actual_time`, `closed_at`.\n- A write merges into the stored object; a key sent as null is removed. `goal_*` keys are refused (422 naming the key)."
          },
          "metadata": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Additional metadata",
            "example": [
              {
                "field": "status",
                "new": "in_progress",
                "old": "not_started"
              }
            ]
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By",
            "description": "Who created the task"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By",
            "description": "Who last updated the task"
          },
          "is_subtask": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Subtask",
            "description": "Is Sub Task"
          },
          "bug_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bug Id",
            "description": "Bug ID (text)",
            "example": "B1234"
          },
          "tracker_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tracker Id",
            "description": "On create, for a bug only: the test tracker to file it under. Refused (422) for a task that is not a bug or a tracker of another project.",
            "example": "TR1234"
          },
          "restricted_to": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restricted To",
            "description": "Usernames allowed on this task (empty = everyone with membership). Setting it needs `restrict` on the task."
          },
          "team_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Team Id",
            "description": "The team the task is filed under. A task with a team and no project is in that team's intake. null = none."
          },
          "sprint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sprint Id",
            "description": "The team sprint this task is filed into. One per task; refused (422) unless the task is reachable from the sprint's team. null = none.",
            "example": "SP12345"
          },
          "milestone_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Milestone Id",
            "description": "The team milestone this task is filed under. One per task, independent of `sprint_id`; refused (422) unless the task is reachable from the milestone's team. null = none.",
            "example": "MS12345"
          },
          "goal_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Goal Id",
            "description": "The project goal this task is filed under. One per task; refused (422) unless it is a live goal of the task's own project. Moving the task to another project clears it. null = none.",
            "example": "G12345"
          }
        },
        "type": "object",
        "title": "TaskUpdate",
        "description": "The body of a task update. Every field is optional, `title` included, and omitted fields are left unchanged. An explicitly empty or whitespace-only `title` is refused (422)."
      },
      "TeamCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id",
            "description": "Organization the team belongs to; the caller must be a non-guest member of it"
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "description": "Unique among the org's active teams (case-insensitive) \u2014 409 otherwise"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "member_user_ids": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Member User Ids",
            "description": "Extra members (user ids) to add as `member`; each must be an active member of the org. The creator is always the team's owner."
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name"
        ],
        "title": "TeamCreate",
        "description": "The request body of `teams.create`."
      },
      "TeamDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "detached_projects": {
            "type": "integer",
            "title": "Detached Projects",
            "description": "Projects unfiled from the team (`detach=true`), else 0"
          },
          "detached_tasks": {
            "type": "integer",
            "title": "Detached Tasks",
            "description": "Tasks unfiled from the team (`detach=true`), else 0"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "team_id",
          "detached_projects",
          "detached_tasks"
        ],
        "title": "TeamDeleted",
        "description": "Returned by `teams.delete`."
      },
      "TeamDetail": {
        "properties": {
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
          },
          "member_count": {
            "type": "integer",
            "title": "Member Count",
            "default": 0
          },
          "project_count": {
            "type": "integer",
            "title": "Project Count",
            "default": 0
          },
          "team_role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TeamRoleEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The caller's own role on the team, null when not a member (org admins are null too unless they are on it)"
          },
          "members": {
            "items": {
              "$ref": "#/components/schemas/TeamMemberOut"
            },
            "type": "array",
            "title": "Members"
          }
        },
        "type": "object",
        "required": [
          "team_id",
          "org_id",
          "name"
        ],
        "title": "TeamDetail",
        "description": "Returned by `teams.create`, `teams.read`, `teams.replace` and `teams.update`."
      },
      "TeamListPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TeamOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "The next page's cursor; null on the last page."
          },
          "total": {
            "type": "integer",
            "title": "Total",
            "description": "Teams matching the query the caller may read, before `limit` / `offset`"
          }
        },
        "type": "object",
        "required": [
          "data",
          "total"
        ],
        "title": "TeamListPage",
        "description": "Returned by `teams.list`."
      },
      "TeamMemberCreate": {
        "properties": {
          "user_id": {
            "type": "string",
            "title": "User Id",
            "description": "An active member of the team's org (422 otherwise); a guest may only be a `member`"
          },
          "team_role": {
            "$ref": "#/components/schemas/TeamRoleEnum",
            "default": "member"
          }
        },
        "type": "object",
        "required": [
          "user_id"
        ],
        "title": "TeamMemberCreate",
        "description": "The request body of `teams.add_member`."
      },
      "TeamMemberDesignation": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Team member user ID"
          },
          "designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Designation",
            "description": "Team member designation"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "TeamMemberDesignation",
        "description": "Part of `ProjectCreate` and `ProjectUpdate`."
      },
      "TeamMemberOut": {
        "properties": {
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "user_id": {
            "type": "string",
            "title": "User Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          },
          "team_role": {
            "$ref": "#/components/schemas/TeamRoleEnum"
          },
          "added_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Added By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "team_id",
          "user_id",
          "team_role"
        ],
        "title": "TeamMemberOut",
        "description": "Returned by `teams.add_member`, `teams.replace_member` and `teams.update_member`."
      },
      "TeamMemberUpdate": {
        "properties": {
          "team_role": {
            "$ref": "#/components/schemas/TeamRoleEnum"
          }
        },
        "type": "object",
        "required": [
          "team_role"
        ],
        "title": "TeamMemberUpdate",
        "description": "The request body of `teams.replace_member` and `teams.update_member`."
      },
      "TeamOut": {
        "properties": {
          "team_id": {
            "type": "string",
            "title": "Team Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
          },
          "member_count": {
            "type": "integer",
            "title": "Member Count",
            "default": 0
          },
          "project_count": {
            "type": "integer",
            "title": "Project Count",
            "default": 0
          },
          "team_role": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TeamRoleEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "The caller's own role on the team, null when not a member (org admins are null too unless they are on it)"
          }
        },
        "type": "object",
        "required": [
          "team_id",
          "org_id",
          "name"
        ],
        "title": "TeamOut",
        "description": "Part of `TeamListPage`."
      },
      "TeamRoleEnum": {
        "type": "string",
        "enum": [
          "owner",
          "member"
        ],
        "title": "TeamRoleEnum",
        "description": "One of `owner`, `member`. Used by `TeamDetail` and 4 more."
      },
      "TeamUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "title": "TeamUpdate",
        "description": "The request body of `teams.replace` and `teams.update`."
      },
      "TokenCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "minLength": 1,
            "title": "Org Id",
            "description": "The organization the token belongs to (a token is org-bound)"
          },
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "What the token is for",
            "examples": [
              "CI deploys"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "live",
              "test"
            ],
            "title": "Kind",
            "description": "`live` (tm_live_\u2026) or `test` (tm_test_\u2026: authenticates and reads, never writes)",
            "default": "live"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "minItems": 1,
            "title": "Scopes",
            "description": "Namespaced scopes: `tasks:read`, `tasks:write`, `projects:read`, `projects:write`, `teams:read`, `teams:write`, `org:read`, `org:write`, `webhooks:read`, `webhooks:write`, `admin`. `admin` implies every scope; `<ns>:write` implies `<ns>:read`.",
            "examples": [
              [
                "tasks:write",
                "projects:read"
              ]
            ]
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "minItems": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids",
            "description": "Restrict the token to these projects (and their tasks; no unfiled task). Omit / null = every project the principal can reach."
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At",
            "description": "When the token stops working; required when the org's policy says so"
          },
          "principal_user_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Principal User Id",
            "description": "Act as a SERVICE ACCOUNT of this org (owner / admin only). Omit = yourself."
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name",
          "scopes"
        ],
        "title": "TokenCreate",
        "description": "The request body of `tokens.create`."
      },
      "TokenCreated": {
        "properties": {
          "token_id": {
            "type": "string",
            "title": "Token Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "principal_user_id": {
            "type": "string",
            "title": "Principal User Id",
            "description": "Who the token acts as"
          },
          "principal_display": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Principal Display",
            "description": "The principal's name: a service account's display name, otherwise the username (or the email when there is none); null when the principal is no longer in the organization."
          },
          "created_by": {
            "type": "string",
            "title": "Created By"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "token_prefix": {
            "type": "string",
            "title": "Token Prefix",
            "description": "The first 12 characters (`tm_live_ab12`) \u2014 the token itself is never shown again"
          },
          "kind": {
            "type": "string",
            "enum": [
              "live",
              "test"
            ],
            "title": "Kind"
          },
          "grant_type": {
            "type": "string",
            "enum": [
              "personal",
              "service_account",
              "authorization_code"
            ],
            "title": "Grant Type"
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "Reserved for third-party apps; null."
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "Updated at most once a minute"
          },
          "use_count": {
            "type": "integer",
            "title": "Use Count",
            "default": 0
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "revoked",
              "expired"
            ],
            "title": "Status"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "revoked_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked By"
          },
          "revoke_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoke Reason",
            "description": "revoked_by_user \u00b7 revoked_by_admin \u00b7 rotated \u00b7 service_account_deactivated; an app's token also client_revoked \u00b7 org_exit \u00b7 reuse_detected \u00b7 revoked_by_app"
          },
          "rotated_from": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rotated From"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "token": {
            "type": "string",
            "title": "Token",
            "description": "THE TOKEN \u2014 shown once, never stored (only its SHA-256 is). Send it as `Authorization: Bearer <token>`."
          }
        },
        "type": "object",
        "required": [
          "token_id",
          "org_id",
          "principal_user_id",
          "created_by",
          "name",
          "token_prefix",
          "kind",
          "grant_type",
          "scopes",
          "status",
          "token"
        ],
        "title": "TokenCreated",
        "example": {
          "created_at": "2026-09-25T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "expires_at": "2026-12-31T00:00:00Z",
          "grant_type": "personal",
          "kind": "live",
          "name": "CI deploys",
          "org_id": "O0020",
          "principal_display": "ada",
          "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "scopes": [
            "tasks:write"
          ],
          "status": "active",
          "token": "tm_live_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
          "token_id": "TK123456",
          "token_prefix": "tm_live_Ab3x",
          "updated_at": "2026-09-25T12:00:00Z",
          "use_count": 0
        },
        "description": "Returned by `tokens.create` and `tokens.rotate`."
      },
      "TokenOut": {
        "properties": {
          "token_id": {
            "type": "string",
            "title": "Token Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "principal_user_id": {
            "type": "string",
            "title": "Principal User Id",
            "description": "Who the token acts as"
          },
          "principal_display": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Principal Display",
            "description": "The principal's name: a service account's display name, otherwise the username (or the email when there is none); null when the principal is no longer in the organization."
          },
          "created_by": {
            "type": "string",
            "title": "Created By"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "token_prefix": {
            "type": "string",
            "title": "Token Prefix",
            "description": "The first 12 characters (`tm_live_ab12`) \u2014 the token itself is never shown again"
          },
          "kind": {
            "type": "string",
            "enum": [
              "live",
              "test"
            ],
            "title": "Kind"
          },
          "grant_type": {
            "type": "string",
            "enum": [
              "personal",
              "service_account",
              "authorization_code"
            ],
            "title": "Grant Type"
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id",
            "description": "Reserved for third-party apps; null."
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "Updated at most once a minute"
          },
          "use_count": {
            "type": "integer",
            "title": "Use Count",
            "default": 0
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "revoked",
              "expired"
            ],
            "title": "Status"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "revoked_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked By"
          },
          "revoke_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoke Reason",
            "description": "revoked_by_user \u00b7 revoked_by_admin \u00b7 rotated \u00b7 service_account_deactivated; an app's token also client_revoked \u00b7 org_exit \u00b7 reuse_detected \u00b7 revoked_by_app"
          },
          "rotated_from": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rotated From"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "token_id",
          "org_id",
          "principal_user_id",
          "created_by",
          "name",
          "token_prefix",
          "kind",
          "grant_type",
          "scopes",
          "status"
        ],
        "title": "TokenOut",
        "example": {
          "created_at": "2026-09-25T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "expires_at": "2026-12-31T00:00:00Z",
          "grant_type": "personal",
          "kind": "live",
          "name": "CI deploys",
          "org_id": "O0020",
          "principal_display": "ada",
          "principal_user_id": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "scopes": [
            "tasks:write"
          ],
          "status": "active",
          "token_id": "TK123456",
          "token_prefix": "tm_live_Ab3x",
          "updated_at": "2026-09-25T12:00:00Z",
          "use_count": 0
        },
        "description": "Returned by `tokens.delete`, `tokens.read` and `tokens.update`."
      },
      "TokenResponse": {
        "properties": {
          "access_token": {
            "type": "string",
            "title": "Access Token",
            "description": "A TasksMate access token (`tm_live_\u2026`), 1 hour"
          },
          "token_type": {
            "type": "string",
            "const": "Bearer",
            "title": "Token Type",
            "default": "Bearer"
          },
          "expires_in": {
            "type": "integer",
            "title": "Expires In",
            "description": "Seconds"
          },
          "refresh_token": {
            "type": "string",
            "title": "Refresh Token",
            "description": "`tmr_\u2026` \u2014 single use: each refresh returns a new one"
          },
          "scope": {
            "type": "string",
            "title": "Scope",
            "description": "Space-separated scopes this access token holds"
          }
        },
        "type": "object",
        "required": [
          "access_token",
          "expires_in",
          "refresh_token",
          "scope"
        ],
        "title": "TokenResponse",
        "example": {
          "access_token": "tm_live_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0R",
          "expires_in": 3600,
          "refresh_token": "tmr_Zk5n8WcHt1YpUo4MiGs7Fj6Da-_Bq0RAb3xQ9eLr0v2",
          "scope": "tasks:write projects:read",
          "token_type": "Bearer"
        },
        "description": "Returned by `oauth.token`."
      },
      "TokenUpdate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "The new name (nothing else about a token changes; rotate or revoke it)"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "TokenUpdate",
        "description": "The request body of `tokens.update`."
      },
      "UnattachedToken": {
        "properties": {
          "token_id": {
            "type": "string",
            "title": "Token Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "token_prefix": {
            "type": "string",
            "title": "Token Prefix"
          },
          "kind": {
            "type": "string",
            "title": "Kind"
          },
          "grant_type": {
            "type": "string",
            "title": "Grant Type"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "principal_user_id": {
            "type": "string",
            "title": "Principal User Id"
          }
        },
        "type": "object",
        "required": [
          "token_id",
          "name",
          "token_prefix",
          "kind",
          "grant_type",
          "scopes",
          "principal_user_id"
        ],
        "title": "UnattachedToken",
        "description": "Part of `AccessReview`."
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "description": "Part of `HTTPValidationError`."
      },
      "ViewCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "scope_type": {
            "$ref": "#/components/schemas/ViewScopeEnum",
            "default": "user"
          },
          "scope_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope Id",
            "description": "team_id for `team`, project_id for `project`; ignored for `user` (always the caller)."
          },
          "resource": {
            "$ref": "#/components/schemas/ViewResourceEnum",
            "description": "Which list the view queries: `task` (default; `GET /v1/tasks`) or `project` (`GET /v1/projects/{org_id}`). Fixed at create. A `project` view cannot be `project`-scoped.",
            "default": "task"
          },
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1,
            "title": "Name",
            "description": "Unique among the scope's active views of the same resource (case-insensitive) \u2014 409 otherwise"
          },
          "query": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              ]
            },
            "type": "object",
            "title": "Query",
            "description": "The resource's list parameters, exactly as its list route accepts them (`GET /v1/tasks` for `task`; `GET /v1/projects/{org_id}`, with `show_all`, for `project`); unknown key or bad value \u2192 the parser's own 400."
          },
          "display": {
            "additionalProperties": true,
            "type": "object",
            "title": "Display",
            "description": "Presentation only: columns, columnOrder, columnSizing, layout, boardOrder, collapsed."
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name"
        ],
        "title": "ViewCreate",
        "description": "The request body of `views.create`."
      },
      "ViewDeleted": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "view_id": {
            "type": "string",
            "title": "View Id"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "view_id"
        ],
        "title": "ViewDeleted",
        "description": "Returned by `views.delete`."
      },
      "ViewDuplicate": {
        "properties": {
          "scope_type": {
            "$ref": "#/components/schemas/ViewScopeEnum",
            "description": "Where the copy goes; the caller must be able to write there (default personal).",
            "default": "user"
          },
          "scope_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Defaults to '<name> (copy)'"
          }
        },
        "type": "object",
        "title": "ViewDuplicate",
        "description": "The request body of `views.duplicate`."
      },
      "ViewListPage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ViewOut"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "ViewListPage",
        "description": "Returned by `views.list`."
      },
      "ViewOut": {
        "properties": {
          "view_id": {
            "type": "string",
            "title": "View Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "scope_type": {
            "$ref": "#/components/schemas/ViewScopeEnum"
          },
          "scope_id": {
            "type": "string",
            "title": "Scope Id"
          },
          "resource": {
            "$ref": "#/components/schemas/ViewResourceEnum",
            "description": "The list the view queries (`task` | `project`); `rows` returns that list's cards",
            "default": "task"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "query": {
            "additionalProperties": true,
            "type": "object",
            "title": "Query"
          },
          "display": {
            "additionalProperties": true,
            "type": "object",
            "title": "Display"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
          },
          "can_edit": {
            "type": "boolean",
            "title": "Can Edit",
            "description": "You may edit and delete this view (the scope's write rule).",
            "default": false
          },
          "pinned": {
            "type": "boolean",
            "title": "Pinned",
            "description": "The caller has this view pinned (pins are personal)",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "view_id",
          "org_id",
          "scope_type",
          "scope_id",
          "name"
        ],
        "title": "ViewOut",
        "description": "Returned by `views.create`, `views.duplicate`, `views.read` and `views.update`."
      },
      "ViewResourceEnum": {
        "type": "string",
        "enum": [
          "task",
          "project"
        ],
        "title": "ViewResourceEnum",
        "description": "One of `task`, `project`. Used by `PinOut` and 3 more."
      },
      "ViewScopeEnum": {
        "type": "string",
        "enum": [
          "user",
          "team",
          "project"
        ],
        "title": "ViewScopeEnum",
        "description": "One of `user`, `team`, `project`. Used by `PinOut` and 3 more."
      },
      "ViewUpdate": {
        "properties": {
          "resource": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ViewResourceEnum"
              },
              {
                "type": "null"
              }
            ],
            "description": "Read-only after create: the view's own value is accepted, any other is a 400 `invalid-parameter`."
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 120,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "query": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Query"
          },
          "display": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display"
          }
        },
        "type": "object",
        "title": "ViewUpdate",
        "description": "The request body of `views.update`."
      },
      "VisibilityUpdate": {
        "properties": {
          "hidden": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hidden",
            "description": "Not offered in this org's picker (existing assignments keep it)"
          },
          "pinned": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pinned",
            "description": "Listed first in its category for this org"
          }
        },
        "type": "object",
        "title": "VisibilityUpdate",
        "description": "The request body of `designations.set_visibility`."
      },
      "WebhookCreate": {
        "properties": {
          "org_id": {
            "type": "string",
            "minLength": 1,
            "title": "Org Id",
            "description": "The organization"
          },
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "examples": [
              "Deploy notifier"
            ]
          },
          "url": {
            "type": "string",
            "maxLength": 2048,
            "minLength": 8,
            "title": "Url",
            "description": "An https:// endpoint (http://localhost is accepted outside production)",
            "examples": [
              "https://hooks.example.com/tasksmate"
            ]
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "maxItems": 200,
            "minItems": 1,
            "title": "Events",
            "description": "Dotted event names (`task.updated`) or `<resource>.*` wildcards (`task.*`); `GET /v1/webhooks/events` lists the vocabulary. A status change is `task.updated` with `status` in `data.before` / `data.after`.",
            "examples": [
              [
                "task.*",
                "project.created"
              ]
            ]
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids",
            "description": "Only events of these projects. Omit / null / [] = the whole organization, including private projects (a project-restricted webhook never receives unfiled tasks' events)."
          }
        },
        "type": "object",
        "required": [
          "org_id",
          "name",
          "url",
          "events"
        ],
        "title": "WebhookCreate",
        "description": "The request body of `webhooks.create`."
      },
      "WebhookCreated": {
        "properties": {
          "subscription_id": {
            "type": "string",
            "title": "Subscription Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "As registered (an admin's own configuration)"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Events"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "secret_prefix": {
            "type": "string",
            "title": "Secret Prefix",
            "description": "`whsec_` + 6 characters \u2014 the secret itself is never shown again"
          },
          "key_version": {
            "type": "integer",
            "title": "Key Version",
            "default": 1
          },
          "secret_rotated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret Rotated At"
          },
          "previous_secret_expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Secret Expires At",
            "description": "Until then deliveries carry a second signature (the old secret)"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "paused",
              "disabled"
            ],
            "title": "Status"
          },
          "disabled_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Disabled Reason",
            "description": "consecutive_failures \u00b7 gone (the endpoint answered 410)"
          },
          "consecutive_failures": {
            "type": "integer",
            "title": "Consecutive Failures",
            "default": 0
          },
          "last_delivery_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Delivery At"
          },
          "last_delivery_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Delivery Status"
          },
          "last_success_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success At"
          },
          "api_version": {
            "type": "string",
            "title": "Api Version"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "secret": {
            "type": "string",
            "title": "Secret",
            "description": "THE SIGNING SECRET \u2014 shown once, stored only encrypted. Verify `webhook-signature` with the base64-decoded part after `whsec_`."
          }
        },
        "type": "object",
        "required": [
          "subscription_id",
          "org_id",
          "name",
          "url",
          "events",
          "secret_prefix",
          "status",
          "api_version",
          "secret"
        ],
        "title": "WebhookCreated",
        "example": {
          "api_version": "2026-09-25",
          "consecutive_failures": 0,
          "created_at": "2026-09-25T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "events": [
            "task.*"
          ],
          "key_version": 1,
          "name": "Deploy notifier",
          "org_id": "O0020",
          "secret": "whsec_Ab3xQ9eLr0v2Zk5n8WcHt1YpUo4MiGs7Fj6Da0Bq0RU=",
          "secret_prefix": "whsec_Ab3xQ9",
          "status": "active",
          "subscription_id": "WH123456",
          "updated_at": "2026-09-25T12:00:00Z",
          "url": "https://hooks.example.com/tasksmate"
        },
        "description": "Returned by `webhooks.create` and `webhooks.rotate_secret`."
      },
      "WebhookEventType": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "The dotted name, or `<resource>.*`"
          },
          "resource": {
            "type": "string",
            "title": "Resource"
          },
          "description": {
            "type": "string",
            "title": "Description"
          },
          "wildcard": {
            "type": "boolean",
            "title": "Wildcard",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "type",
          "resource",
          "description"
        ],
        "title": "WebhookEventType",
        "description": "Part of `Page_WebhookEventType_`."
      },
      "WebhookOut": {
        "properties": {
          "subscription_id": {
            "type": "string",
            "title": "Subscription Id"
          },
          "org_id": {
            "type": "string",
            "title": "Org Id"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "As registered (an admin's own configuration)"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Events"
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids"
          },
          "secret_prefix": {
            "type": "string",
            "title": "Secret Prefix",
            "description": "`whsec_` + 6 characters \u2014 the secret itself is never shown again"
          },
          "key_version": {
            "type": "integer",
            "title": "Key Version",
            "default": 1
          },
          "secret_rotated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Secret Rotated At"
          },
          "previous_secret_expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previous Secret Expires At",
            "description": "Until then deliveries carry a second signature (the old secret)"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "paused",
              "disabled"
            ],
            "title": "Status"
          },
          "disabled_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Disabled Reason",
            "description": "consecutive_failures \u00b7 gone (the endpoint answered 410)"
          },
          "consecutive_failures": {
            "type": "integer",
            "title": "Consecutive Failures",
            "default": 0
          },
          "last_delivery_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Delivery At"
          },
          "last_delivery_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Delivery Status"
          },
          "last_success_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success At"
          },
          "api_version": {
            "type": "string",
            "title": "Api Version"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "subscription_id",
          "org_id",
          "name",
          "url",
          "events",
          "secret_prefix",
          "status",
          "api_version"
        ],
        "title": "WebhookOut",
        "example": {
          "api_version": "2026-09-25",
          "consecutive_failures": 0,
          "created_at": "2026-09-25T12:00:00Z",
          "created_by": "3f1c2a9e-0b7d-4c1e-9a55-2b8f0d6e4a10",
          "events": [
            "task.*"
          ],
          "key_version": 1,
          "name": "Deploy notifier",
          "org_id": "O0020",
          "secret_prefix": "whsec_Ab3xQ9",
          "status": "active",
          "subscription_id": "WH123456",
          "updated_at": "2026-09-25T12:00:00Z",
          "url": "https://hooks.example.com/tasksmate"
        },
        "description": "Returned by `webhooks.delete`, `webhooks.read` and `webhooks.update`."
      },
      "WebhookUpdate": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048,
                "minLength": 8
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "events": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 200,
                "minItems": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Events",
            "description": "Dotted event names (`task.updated`) or `<resource>.*` wildcards (`task.*`); `GET /v1/webhooks/events` lists the vocabulary. A status change is `task.updated` with `status` in `data.before` / `data.after`."
          },
          "project_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Ids",
            "description": "Only events of these projects. Omit / null / [] = the whole organization, including private projects (a project-restricted webhook never receives unfiled tasks' events). Send [] to widen back to the whole organization."
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "active",
                  "paused"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Pause / resume. A DISABLED webhook is re-enabled with `active` (its failure count resets)."
          }
        },
        "type": "object",
        "title": "WebhookUpdate",
        "description": "The request body of `webhooks.update`."
      },
      "WhatsNewResponse": {
        "properties": {
          "latest_releases": {
            "items": {
              "$ref": "#/components/schemas/Release"
            },
            "type": "array",
            "title": "Latest Releases"
          },
          "summary": {
            "additionalProperties": true,
            "type": "object",
            "title": "Summary"
          },
          "since_date": {
            "type": "string",
            "format": "date-time",
            "title": "Since Date"
          }
        },
        "type": "object",
        "required": [
          "latest_releases",
          "summary",
          "since_date"
        ],
        "title": "WhatsNewResponse",
        "description": "Returned by `releases.whats_new`."
      },
      "Problem": {
        "type": "object",
        "title": "Problem",
        "description": "An RFC 9457 problem details object \u2014 the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "instance",
          "request_id"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "`about:blank` or a `urn:tasksmate:problem:*` identifier",
            "enum": [
              "about:blank",
              "urn:tasksmate:problem:validation",
              "urn:tasksmate:problem:invalid-parameter",
              "urn:tasksmate:problem:precondition-failed",
              "urn:tasksmate:problem:idempotency-key-reused",
              "urn:tasksmate:problem:idempotency-key-in-flight",
              "urn:tasksmate:problem:idempotency-key-invalid",
              "urn:tasksmate:problem:rate-limit",
              "urn:tasksmate:problem:internal",
              "urn:tasksmate:problem:token-invalid",
              "urn:tasksmate:problem:token-expired",
              "urn:tasksmate:problem:token-revoked",
              "urn:tasksmate:problem:insufficient-scope",
              "urn:tasksmate:problem:test-token-read-only",
              "urn:tasksmate:problem:token-policy",
              "urn:tasksmate:problem:url-refused"
            ]
          },
          "title": {
            "type": "string",
            "example": "Forbidden"
          },
          "status": {
            "type": "integer",
            "example": 403
          },
          "detail": {
            "description": "Human-readable explanation (a string; for a 422, the list of validation errors)",
            "example": "This task is restricted to other users"
          },
          "instance": {
            "type": "string",
            "example": "/v1/tasks/T123"
          },
          "request_id": {
            "type": "string",
            "example": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter"
          }
        }
      },
      "Health": {
        "type": "object",
        "title": "Health",
        "properties": {
          "status": {
            "type": "string"
          }
        },
        "example": {
          "status": "ok"
        },
        "description": "Returned by `health.read`."
      },
      "WebhookActor": {
        "description": "Who caused the event.",
        "properties": {
          "kind": {
            "description": "`user`, `service_account` (acting through an access token) or `system`.",
            "examples": [
              "user"
            ],
            "title": "Kind",
            "type": "string"
          },
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The user's id (null for `system`)",
            "examples": [
              "406670f1-c819-4d27-9552-1747c551cf5c"
            ],
            "title": "Id"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Their username at the time",
            "examples": [
              "ada"
            ],
            "title": "Username"
          }
        },
        "required": [
          "kind",
          "id",
          "username"
        ],
        "title": "WebhookActor",
        "type": "object"
      },
      "WebhookEvent": {
        "description": "One webhook delivery's JSON body. Verify the signature over the raw bytes first (Standard Webhooks; the developer docs' Webhooks guide has the recipe); delivery is at-least-once, so deduplicate on `id`.",
        "properties": {
          "id": {
            "description": "The delivery id \u2014 the same as the `webhook-id` header (a replay keeps the original's)",
            "examples": [
              "WD000001"
            ],
            "title": "Id",
            "type": "string"
          },
          "type": {
            "description": "The event: one of the `webhooks` keys of this document (`task.updated`, \u2026), or `webhook.test` for a test send",
            "examples": [
              "task.updated"
            ],
            "title": "Type",
            "type": "string"
          },
          "api_version": {
            "description": "The subscription's API version (the date the body's shape is pinned to)",
            "examples": [
              "2026-09-25"
            ],
            "title": "Api Version",
            "type": "string"
          },
          "created_at": {
            "description": "When the event happened (the audit row's time)",
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "org_id": {
            "examples": [
              "O0020"
            ],
            "title": "Org Id",
            "type": "string"
          },
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The project the event belongs to, if any",
            "examples": [
              "P30104"
            ],
            "title": "Project Id"
          },
          "actor": {
            "$ref": "#/components/schemas/WebhookActor"
          },
          "data": {
            "$ref": "#/components/schemas/WebhookEventData"
          },
          "request_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The API request that caused it (quote it to support)",
            "examples": [
              "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
            ],
            "title": "Request Id"
          }
        },
        "required": [
          "id",
          "type",
          "api_version",
          "created_at",
          "org_id",
          "project_id",
          "actor",
          "data",
          "request_id"
        ],
        "title": "WebhookEvent",
        "type": "object"
      },
      "WebhookEventData": {
        "description": "What changed: the audit row's scrubbed diff \u2014 never a whole resource, never a secret.",
        "properties": {
          "resource_type": {
            "description": "`task`, `project`, `member`, `invite`, `organization`, `team`, `webhook`, \u2026",
            "examples": [
              "task"
            ],
            "title": "Resource Type",
            "type": "string"
          },
          "resource_id": {
            "description": "The resource's id \u2014 read it with the API for the full object",
            "examples": [
              "T869658"
            ],
            "title": "Resource Id",
            "type": "string"
          },
          "before": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "The changed fields before (null on a create)",
            "examples": [
              {
                "status": "not_started"
              }
            ],
            "title": "Before"
          },
          "after": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "The changed fields after (null on a delete)",
            "examples": [
              {
                "status": "in_progress"
              }
            ],
            "title": "After"
          }
        },
        "required": [
          "resource_type",
          "resource_id",
          "before",
          "after"
        ],
        "title": "WebhookEventData",
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "A Supabase session token (`Authorization: Bearer <jwt>`) \u2014 what the TasksMate app sends. It holds every scope."
      },
      "TasksMateToken": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "tm_live_\u2026 / tm_test_\u2026",
        "description": "A TasksMate access token: `Authorization: Bearer tm_live_\u2026`.\n\n- **Minting:** `POST /v1/tokens` (or Developers \u2192 Tokens in the app). The token is shown once.\n- **Reach:** one organization, optionally limited to some of its projects.\n- **Scopes:** each operation's `x-scopes` names the one it needs. `admin` implies every scope; `<ns>:write` implies `<ns>:read`.\n- **Test tokens:** `tm_test_\u2026` tokens authenticate and read, but never write.\n- **Rate limit:** 600 requests a minute per token (60 for a test token). Every response carries `X-RateLimit-*`; over the limit is a 429 with `Retry-After`.\n- **Internal operations** refuse every token (403 `insufficient-scope` with `required: null`).\n\n| Scope | Grants |\n|---|---|\n| `tasks:read` | Read tasks, their comments, attachments, history, sections and saved views. |\n| `tasks:write` | Create, update and delete tasks, comments, attachments, sections and saved views (implies tasks:read). |\n| `projects:read` | Read projects, their members, resources, statistics, goals and roadmaps. |\n| `projects:write` | Create, update and delete projects, their members, resources and goals (implies projects:read). |\n| `teams:read` | Read teams, their members, sprints, milestones and availability. |\n| `teams:write` | Create, update and delete teams, their members, sprints, milestones and availability (implies teams:read). |\n| `org:read` | Read the organization, its settings, members, invites, designations, access tokens and access review. |\n| `org:write` | Change the organization's settings, members, invites and designations; mint, rotate and revoke access tokens and service accounts (implies org:read). |\n| `webhooks:read` | Read the organization's webhooks and their delivery logs (owner / admin, or a service account). |\n| `webhooks:write` | Create, change, pause, test, rotate and delete webhooks and replay deliveries (implies webhooks:read). |\n| `admin` | Every scope, including the audit log. |"
      },
      "oauth2": {
        "type": "oauth2",
        "description": "For third-party apps acting for a TasksMate user: the authorization-code flow with PKCE (S256, required). The access token it returns is a `tm_live_\u2026` token for one organization, valid 1 hour; refresh tokens rotate on every use.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "/oauth/authorize",
            "tokenUrl": "/oauth/token",
            "refreshUrl": "/oauth/token",
            "scopes": {
              "tasks:read": "Read tasks, their comments, attachments, history, sections and saved views.",
              "tasks:write": "Create, update and delete tasks, comments, attachments, sections and saved views (implies tasks:read).",
              "projects:read": "Read projects, their members, resources, statistics, goals and roadmaps.",
              "projects:write": "Create, update and delete projects, their members, resources and goals (implies projects:read).",
              "teams:read": "Read teams, their members, sprints, milestones and availability.",
              "teams:write": "Create, update and delete teams, their members, sprints, milestones and availability (implies teams:read).",
              "org:read": "Read the organization, its settings, members, invites, designations, access tokens and access review.",
              "org:write": "Change the organization's settings, members, invites and designations; mint, rotate and revoke access tokens and service accounts (implies org:read).",
              "webhooks:read": "Read the organization's webhooks and their delivery logs (owner / admin, or a service account).",
              "webhooks:write": "Create, change, pause, test, rotate and delete webhooks and replay deliveries (implies webhooks:read).",
              "admin": "Every scope, including the audit log."
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://tasksmate-fdfsarhnf5gacfb7.eastus-01.azurewebsites.net",
      "description": "The deployed TasksMate API (production)"
    }
  ],
  "webhooks": {
    "availability.created": {
      "post": {
        "summary": "availability.created",
        "description": "A member recorded days they are unavailable.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.availability.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "availability.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "availability.deleted": {
      "post": {
        "summary": "availability.deleted",
        "description": "A member's unavailable days were removed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.availability.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "availability.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "availability.updated": {
      "post": {
        "summary": "availability.updated",
        "description": "A member's unavailable days changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.availability.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "availability.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "designation.created": {
      "post": {
        "summary": "designation.created",
        "description": "A designation was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.designation.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "designation.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "designation",
                  "resource_id": "DO000123",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "designation.deactivated": {
      "post": {
        "summary": "designation.deactivated",
        "description": "A designation was deactivated.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.designation.deactivated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "designation.deactivated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "designation",
                  "resource_id": "DO000123",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "designation.updated": {
      "post": {
        "summary": "designation.updated",
        "description": "A designation changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.designation.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "designation.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "designation",
                  "resource_id": "DO000123",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "designation.visibility_changed": {
      "post": {
        "summary": "designation.visibility_changed",
        "description": "A designation was shown or hidden.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.designation.visibility_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "designation.visibility_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "designation",
                  "resource_id": "DO000123",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.closed": {
      "post": {
        "summary": "goal.closed",
        "description": "A project goal was closed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.closed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.closed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.created": {
      "post": {
        "summary": "goal.created",
        "description": "A project goal was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.deleted": {
      "post": {
        "summary": "goal.deleted",
        "description": "A project goal was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.moved": {
      "post": {
        "summary": "goal.moved",
        "description": "A goal moved to another project.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.moved",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.moved",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.reopened": {
      "post": {
        "summary": "goal.reopened",
        "description": "A project goal was reopened.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.reopened",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.reopened",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.reordered": {
      "post": {
        "summary": "goal.reordered",
        "description": "A project's goal order changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.reordered",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.reordered",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "goal.updated": {
      "post": {
        "summary": "goal.updated",
        "description": "A project goal changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.goal.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "goal.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "goal",
                  "resource_id": "G12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.accepted": {
      "post": {
        "summary": "invite.accepted",
        "description": "An invitation was accepted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.accepted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.accepted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.created": {
      "post": {
        "summary": "invite.created",
        "description": "An invitation to the organization was sent.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.external_override": {
      "post": {
        "summary": "invite.external_override",
        "description": "An invitation outside the verified domains was allowed by an admin.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.external_override",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.external_override",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.rejected": {
      "post": {
        "summary": "invite.rejected",
        "description": "An invitation was declined.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.rejected",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.rejected",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.revoked": {
      "post": {
        "summary": "invite.revoked",
        "description": "An invitation was withdrawn.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.revoked",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.revoked",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "invite.updated": {
      "post": {
        "summary": "invite.updated",
        "description": "An invitation was changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.invite.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "invite.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "invite",
                  "resource_id": "I0042",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "member.added": {
      "post": {
        "summary": "member.added",
        "description": "Someone joined the organization.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.member.added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "member.added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "member.auto_joined": {
      "post": {
        "summary": "member.auto_joined",
        "description": "Someone joined the organization through a verified domain.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.member.auto_joined",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "member.auto_joined",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "member.designation_changed": {
      "post": {
        "summary": "member.designation_changed",
        "description": "A member's designation changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.member.designation_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "member.designation_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "member.removed": {
      "post": {
        "summary": "member.removed",
        "description": "Someone left or was removed from the organization.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.member.removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "member.removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "member.role_changed": {
      "post": {
        "summary": "member.role_changed",
        "description": "A member's organization role changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.member.role_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "member.role_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "milestone.closed": {
      "post": {
        "summary": "milestone.closed",
        "description": "A team milestone was closed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.milestone.closed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "milestone.closed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "milestone",
                  "resource_id": "MS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "milestone.created": {
      "post": {
        "summary": "milestone.created",
        "description": "A team milestone was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.milestone.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "milestone.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "milestone",
                  "resource_id": "MS12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "milestone.deleted": {
      "post": {
        "summary": "milestone.deleted",
        "description": "A team milestone was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.milestone.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "milestone.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "milestone",
                  "resource_id": "MS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "milestone.reopened": {
      "post": {
        "summary": "milestone.reopened",
        "description": "A team milestone was reopened.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.milestone.reopened",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "milestone.reopened",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "milestone",
                  "resource_id": "MS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "milestone.updated": {
      "post": {
        "summary": "milestone.updated",
        "description": "A team milestone changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.milestone.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "milestone.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "milestone",
                  "resource_id": "MS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.deleted": {
      "post": {
        "summary": "org.deleted",
        "description": "The organization was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "organization",
                  "resource_id": "O0020",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.domain_added": {
      "post": {
        "summary": "org.domain_added",
        "description": "A domain was added to the organization.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.domain_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.domain_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "organization",
                  "resource_id": "O0020",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.domain_removed": {
      "post": {
        "summary": "org.domain_removed",
        "description": "A domain was removed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.domain_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.domain_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "organization",
                  "resource_id": "O0020",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.domain_verified": {
      "post": {
        "summary": "org.domain_verified",
        "description": "A domain was verified.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.domain_verified",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.domain_verified",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "organization",
                  "resource_id": "O0020",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.join_request_decided": {
      "post": {
        "summary": "org.join_request_decided",
        "description": "A request to join the organization was approved or declined.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.join_request_decided",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.join_request_decided",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "member",
                  "resource_id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.settings_changed": {
      "post": {
        "summary": "org.settings_changed",
        "description": "The organization's settings changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.settings_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.settings_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "settings",
                  "resource_id": "O0020",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "org.updated": {
      "post": {
        "summary": "org.updated",
        "description": "The organization's name or description changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.org.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "org.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "organization",
                  "resource_id": "O0020",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.created": {
      "post": {
        "summary": "project.created",
        "description": "A project was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.delegation_changed": {
      "post": {
        "summary": "project.delegation_changed",
        "description": "Whether a project's editors may add members changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.delegation_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.delegation_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.deleted": {
      "post": {
        "summary": "project.deleted",
        "description": "A project was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.leads_changed": {
      "post": {
        "summary": "project.leads_changed",
        "description": "A project's leads changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.leads_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.leads_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.member_added": {
      "post": {
        "summary": "project.member_added",
        "description": "Someone was added to a project.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.member_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.member_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.member_removed": {
      "post": {
        "summary": "project.member_removed",
        "description": "Someone was removed from a project.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.member_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.member_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.member_role_changed": {
      "post": {
        "summary": "project.member_role_changed",
        "description": "A project member's role changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.member_role_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.member_role_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.member_updated": {
      "post": {
        "summary": "project.member_updated",
        "description": "A project member's details changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.member_updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.member_updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.owner_transferred": {
      "post": {
        "summary": "project.owner_transferred",
        "description": "A project's ownership moved to another member.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.owner_transferred",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.owner_transferred",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.reordered": {
      "post": {
        "summary": "project.reordered",
        "description": "The organization's project order changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.reordered",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.reordered",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.updated": {
      "post": {
        "summary": "project.updated",
        "description": "A project's fields changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "project.visibility_changed": {
      "post": {
        "summary": "project.visibility_changed",
        "description": "A project became public or private.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.project.visibility_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "project.visibility_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "project",
                  "resource_id": "P30104",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_journey.created": {
      "post": {
        "summary": "roadmap_journey.created",
        "description": "A roadmap journey was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_journey.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_journey.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_journey",
                  "resource_id": "RJ12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_journey.deleted": {
      "post": {
        "summary": "roadmap_journey.deleted",
        "description": "A roadmap journey was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_journey.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_journey.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_journey",
                  "resource_id": "RJ12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_journey.updated": {
      "post": {
        "summary": "roadmap_journey.updated",
        "description": "A roadmap journey changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_journey.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_journey.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_journey",
                  "resource_id": "RJ12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.created": {
      "post": {
        "summary": "roadmap_stop.created",
        "description": "A roadmap stop was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.deleted": {
      "post": {
        "summary": "roadmap_stop.deleted",
        "description": "A roadmap stop was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.milestone_pinned": {
      "post": {
        "summary": "roadmap_stop.milestone_pinned",
        "description": "A milestone was pinned to a roadmap stop.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.milestone_pinned",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.milestone_pinned",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.milestone_unpinned": {
      "post": {
        "summary": "roadmap_stop.milestone_unpinned",
        "description": "A milestone was unpinned from a roadmap stop.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.milestone_unpinned",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.milestone_unpinned",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.task_attached": {
      "post": {
        "summary": "roadmap_stop.task_attached",
        "description": "A task was attached to a roadmap stop.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.task_attached",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.task_attached",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.task_detached": {
      "post": {
        "summary": "roadmap_stop.task_detached",
        "description": "A task was detached from a roadmap stop.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.task_detached",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.task_detached",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "roadmap_stop.updated": {
      "post": {
        "summary": "roadmap_stop.updated",
        "description": "A roadmap stop changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.roadmap_stop.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "roadmap_stop.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "roadmap_stop",
                  "resource_id": "RS12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "service_account.created": {
      "post": {
        "summary": "service_account.created",
        "description": "A service account was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.service_account.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "service_account.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "service_account",
                  "resource_id": "5d1c0b4e-2f7a-4f0e-9b1e-8c1b2a3d4e5f",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "service_account.deactivated": {
      "post": {
        "summary": "service_account.deactivated",
        "description": "A service account was deactivated and its tokens revoked.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.service_account.deactivated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "service_account.deactivated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "service_account",
                  "resource_id": "5d1c0b4e-2f7a-4f0e-9b1e-8c1b2a3d4e5f",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "service_account.renamed": {
      "post": {
        "summary": "service_account.renamed",
        "description": "A service account was renamed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.service_account.renamed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "service_account.renamed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "service_account",
                  "resource_id": "5d1c0b4e-2f7a-4f0e-9b1e-8c1b2a3d4e5f",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "sprint.created": {
      "post": {
        "summary": "sprint.created",
        "description": "A team sprint was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.sprint.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "sprint.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "sprint",
                  "resource_id": "SP12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "sprint.deleted": {
      "post": {
        "summary": "sprint.deleted",
        "description": "A team sprint was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.sprint.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "sprint.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "sprint",
                  "resource_id": "SP12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "sprint.updated": {
      "post": {
        "summary": "sprint.updated",
        "description": "A team sprint changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.sprint.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "sprint.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "sprint",
                  "resource_id": "SP12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.attachment_added": {
      "post": {
        "summary": "task.attachment_added",
        "description": "A file was attached to a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.attachment_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.attachment_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.attachment_removed": {
      "post": {
        "summary": "task.attachment_removed",
        "description": "An attachment was removed from a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.attachment_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.attachment_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.comment_added": {
      "post": {
        "summary": "task.comment_added",
        "description": "A comment was posted on a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.comment_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.comment_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.comment_removed": {
      "post": {
        "summary": "task.comment_removed",
        "description": "A comment on a task was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.comment_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.comment_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.comment_updated": {
      "post": {
        "summary": "task.comment_updated",
        "description": "A comment on a task was edited.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.comment_updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.comment_updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.created": {
      "post": {
        "summary": "task.created",
        "description": "A task was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.deleted": {
      "post": {
        "summary": "task.deleted",
        "description": "A task was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.dependency_added": {
      "post": {
        "summary": "task.dependency_added",
        "description": "A dependency was added to a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.dependency_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.dependency_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.dependency_removed": {
      "post": {
        "summary": "task.dependency_removed",
        "description": "A dependency was removed from a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.dependency_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.dependency_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.moved": {
      "post": {
        "summary": "task.moved",
        "description": "A task moved to another project (or out of one).\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.moved",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.moved",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.restricted": {
      "post": {
        "summary": "task.restricted",
        "description": "Who may see a task changed (`restricted_to`).\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.restricted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.restricted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.subtask_added": {
      "post": {
        "summary": "task.subtask_added",
        "description": "A subtask was linked under a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.subtask_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.subtask_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.subtask_removed": {
      "post": {
        "summary": "task.subtask_removed",
        "description": "A subtask was unlinked from a task.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.subtask_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.subtask_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "task.updated": {
      "post": {
        "summary": "task.updated",
        "description": "A task's fields changed (status, title, assignee, dates, \u2026); `data.before` / `data.after` name the fields.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.task.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "task.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": "P30104",
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "task",
                  "resource_id": "T869658",
                  "before": {
                    "status": "not_started"
                  },
                  "after": {
                    "status": "in_progress"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.created": {
      "post": {
        "summary": "team.created",
        "description": "A team was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.deleted": {
      "post": {
        "summary": "team.deleted",
        "description": "A team was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.member_added": {
      "post": {
        "summary": "team.member_added",
        "description": "Someone joined a team.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.member_added",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.member_added",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.member_removed": {
      "post": {
        "summary": "team.member_removed",
        "description": "Someone left a team.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.member_removed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.member_removed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.member_role_changed": {
      "post": {
        "summary": "team.member_role_changed",
        "description": "A team member's role changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.member_role_changed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.member_role_changed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "team.updated": {
      "post": {
        "summary": "team.updated",
        "description": "A team's fields changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.team.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "team.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "team",
                  "resource_id": "TM12345",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "token.auth_failed": {
      "post": {
        "summary": "token.auth_failed",
        "description": "A request presented an expired or revoked access token.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.token.auth_failed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "token.auth_failed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "token",
                  "resource_id": "TK142713",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "token.created": {
      "post": {
        "summary": "token.created",
        "description": "An access token was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.token.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "token.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "token",
                  "resource_id": "TK142713",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "token.renamed": {
      "post": {
        "summary": "token.renamed",
        "description": "An access token was renamed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.token.renamed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "token.renamed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "token",
                  "resource_id": "TK142713",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "token.revoked": {
      "post": {
        "summary": "token.revoked",
        "description": "An access token was revoked.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.token.revoked",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "token.revoked",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "token",
                  "resource_id": "TK142713",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "token.rotated": {
      "post": {
        "summary": "token.rotated",
        "description": "An access token was rotated (the old one works 60 seconds more).\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.token.rotated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "token.rotated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "token",
                  "resource_id": "TK142713",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.created": {
      "post": {
        "summary": "webhook.created",
        "description": "A webhook was created.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.created",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.created",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": null,
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.deleted": {
      "post": {
        "summary": "webhook.deleted",
        "description": "A webhook was deleted.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.deleted",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.deleted",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": null
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.delivery_replayed": {
      "post": {
        "summary": "webhook.delivery_replayed",
        "description": "A webhook delivery was sent again.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.delivery_replayed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.delivery_replayed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.disabled": {
      "post": {
        "summary": "webhook.disabled",
        "description": "A webhook was disabled after repeated failed deliveries, or because its endpoint answered 410 Gone.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.disabled",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.disabled",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.paused": {
      "post": {
        "summary": "webhook.paused",
        "description": "A webhook was paused.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.paused",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.paused",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.resumed": {
      "post": {
        "summary": "webhook.resumed",
        "description": "A webhook was resumed (or re-enabled after being disabled).\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.resumed",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.resumed",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.rotated": {
      "post": {
        "summary": "webhook.rotated",
        "description": "A webhook's signing secret was rotated (the old one signs too for 24 hours).\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.rotated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.rotated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.test": {
      "post": {
        "summary": "webhook.test",
        "description": "A test delivery (`POST /v1/webhooks/{subscription_id}/test`); `data` names the webhook itself. Never retried.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.test",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.test",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    },
    "webhook.updated": {
      "post": {
        "summary": "webhook.updated",
        "description": "A webhook's name, URL, events or projects changed.\n\n- **Signed** with Standard Webhooks (the headers below). Verify the signature over the raw body before parsing it \u2014 the recipes are in the developer docs' Webhooks guide.\n- **Answer any 2xx within 20 s.** Anything else, or no answer, is retried: 8 attempts over about 21 h.\n- **410 Gone** disables the webhook.",
        "operationId": "webhook.webhook.updated",
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "webhook-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "WD000001",
            "description": "The delivery id \u2014 equal to the body's `id`. Dedupe on it (delivery is at-least-once)."
          },
          {
            "name": "webhook-timestamp",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "1790380800",
            "description": "Unix seconds when this attempt was signed. Refuse one more than 5 minutes from now (a replay)."
          },
          {
            "name": "webhook-signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=",
            "description": "Space-separated `v1,<base64>` HMAC-SHA256 signatures of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of the secret after `whsec_`. Two during a rotation's 24 h grace."
          },
          {
            "name": "X-TasksMate-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "task.updated",
            "description": "The event type (the body's `type`), for routing before parsing."
          },
          {
            "name": "User-Agent",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "TasksMate-Webhooks/1",
            "description": "Identifies TasksMate's sender."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "WD000001",
                "type": "webhook.updated",
                "api_version": "2026-09-25",
                "created_at": "2026-09-25T12:00:00Z",
                "org_id": "O0020",
                "project_id": null,
                "actor": {
                  "kind": "user",
                  "id": "406670f1-c819-4d27-9552-1747c551cf5c",
                  "username": "ada"
                },
                "data": {
                  "resource_type": "webhook",
                  "resource_id": "WH967559",
                  "before": {
                    "name": "Before"
                  },
                  "after": {
                    "name": "After"
                  }
                },
                "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Received \u2014 any 2xx within 20 s ends the delivery"
          },
          "410": {
            "description": "Gone \u2014 TasksMate disables the webhook and stops sending"
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "health",
      "description": "Liveness."
    },
    {
      "name": "me",
      "description": "Who the caller is: the principal and its organizations / roles."
    },
    {
      "name": "organizations",
      "description": "Organizations you belong to, and their settings."
    },
    {
      "name": "organization-members",
      "description": "The members of an organization and their roles."
    },
    {
      "name": "organization-invites",
      "description": "Invitations into an organization."
    },
    {
      "name": "service-accounts",
      "description": "Non-human organization members that hold access tokens. They cannot sign in."
    },
    {
      "name": "tokens",
      "description": "TasksMate access tokens (`tm_live_\u2026` / `tm_test_\u2026`): mint, list, rename, revoke, rotate."
    },
    {
      "name": "webhooks",
      "description": "Signed HTTP callbacks for audit events: subscriptions, the signing secret (shown once, rotated with a 24 h grace), test sends, the delivery log and replay. Standard-Webhooks signatures; at-least-once with retries."
    },
    {
      "name": "designations",
      "description": "Job designations (global and per-organization)."
    },
    {
      "name": "projects",
      "description": "Projects: create, read, update, delete, reorder."
    },
    {
      "name": "project-members",
      "description": "The members of a project and their roles."
    },
    {
      "name": "project-resources",
      "description": "Links and files attached to a project."
    },
    {
      "name": "project-stats",
      "description": "A project's task statistics."
    },
    {
      "name": "goals",
      "description": "Goals: named containers of a project's tasks."
    },
    {
      "name": "tasks",
      "description": "Tasks, the filter grammar and search (`GET /v1/tasks` with `filter[search]` IS search), and a task's links."
    },
    {
      "name": "task-comments",
      "description": "Comments on a task (threaded)."
    },
    {
      "name": "task-attachments",
      "description": "Files attached to a task."
    },
    {
      "name": "task-history",
      "description": "A task's change history."
    },
    {
      "name": "sections",
      "description": "Sections of a project, a team or a person's own list."
    },
    {
      "name": "teams",
      "description": "Teams, their members and their task list."
    },
    {
      "name": "sprints",
      "description": "A team's sprints."
    },
    {
      "name": "milestones",
      "description": "A team's milestones."
    },
    {
      "name": "availability",
      "description": "Who on a team is unavailable, and when."
    },
    {
      "name": "roadmap",
      "description": "Roadmaps (read): organization, project, team, and a task's stops."
    },
    {
      "name": "views",
      "description": "Saved views and the tasks they show."
    },
    {
      "name": "view-pins",
      "description": "Your sidebar pins (views and projects)."
    },
    {
      "name": "audit",
      "description": "The organization's audit log (owners and admins)."
    },
    {
      "name": "releases",
      "description": "What's new in TasksMate."
    },
    {
      "name": "oauth-clients",
      "description": "Third-party OAuth apps your organization registers: redirect URIs, allowed scopes, the client secret (shown once, rotated with a 24 h grace), revocation."
    },
    {
      "name": "connected-apps",
      "description": "The OAuth apps you have connected to TasksMate, and disconnecting them."
    },
    {
      "name": "oauth",
      "description": "The OAuth authorization server: discovery, authorize, token (authorization code with PKCE, refresh) and revocation. Errors here are OAuth JSON (`error`, `error_description`), not problem details."
    }
  ],
  "x-problem-types": [
    {
      "type": "about:blank",
      "statuses": [],
      "description": "A plain HTTP error; the status and `detail` say everything."
    },
    {
      "type": "urn:tasksmate:problem:validation",
      "statuses": [
        422
      ],
      "description": "The request body or query did not validate. `errors` lists each failure (`loc`, `msg`, `type`)."
    },
    {
      "type": "urn:tasksmate:problem:invalid-parameter",
      "statuses": [
        400
      ],
      "description": "A query parameter is outside what the operation accepts; `errors[].allowed` lists the valid values."
    },
    {
      "type": "urn:tasksmate:problem:precondition-failed",
      "statuses": [
        412
      ],
      "description": "`If-Match` did not match the resource's current `ETag` \u2014 re-read it and retry."
    },
    {
      "type": "urn:tasksmate:problem:idempotency-key-reused",
      "statuses": [
        422
      ],
      "description": "This `Idempotency-Key` was first used for a different request (method, path or body)."
    },
    {
      "type": "urn:tasksmate:problem:idempotency-key-in-flight",
      "statuses": [
        409
      ],
      "description": "The first request with this `Idempotency-Key` has not finished; retry shortly."
    },
    {
      "type": "urn:tasksmate:problem:idempotency-key-invalid",
      "statuses": [
        400
      ],
      "description": "`Idempotency-Key` must be 1\u2013255 printable ASCII characters."
    },
    {
      "type": "urn:tasksmate:problem:rate-limit",
      "statuses": [
        429
      ],
      "description": "Too many requests with this access token; wait `Retry-After` seconds (`X-RateLimit-*` say where you stand)."
    },
    {
      "type": "urn:tasksmate:problem:internal",
      "statuses": [
        500
      ],
      "description": "An unexpected server error. Quote `request_id` to support."
    },
    {
      "type": "urn:tasksmate:problem:token-invalid",
      "statuses": [
        401
      ],
      "description": "The access token is unknown or malformed (or its principal no longer exists)."
    },
    {
      "type": "urn:tasksmate:problem:token-expired",
      "statuses": [
        401
      ],
      "description": "The access token is past its `expires_at`; mint a new one."
    },
    {
      "type": "urn:tasksmate:problem:token-revoked",
      "statuses": [
        401
      ],
      "description": "The access token was revoked (by its owner, an admin, a rotation, or its service account's deactivation)."
    },
    {
      "type": "urn:tasksmate:problem:insufficient-scope",
      "statuses": [
        403
      ],
      "description": "The access token does not carry the scope this operation needs (`errors[0].required`; null = not available to tokens)."
    },
    {
      "type": "urn:tasksmate:problem:test-token-read-only",
      "statuses": [
        403
      ],
      "description": "A `tm_test_` token can authenticate and read, never write."
    },
    {
      "type": "urn:tasksmate:problem:token-policy",
      "statuses": [
        403,
        422
      ],
      "description": "The organization's token policy refuses this token (personal tokens off, expiry required, or past the maximum lifetime)."
    },
    {
      "type": "urn:tasksmate:problem:url-refused",
      "statuses": [
        422
      ],
      "description": "The webhook URL is refused: not https, carries credentials, or resolves to a private, loopback, link-local, metadata, multicast or reserved address (`errors[0].reason`)."
    }
  ],
  "x-scope-descriptions": [
    {
      "scope": "tasks:read",
      "description": "Read tasks, their comments, attachments, history, sections and saved views."
    },
    {
      "scope": "tasks:write",
      "description": "Create, update and delete tasks, comments, attachments, sections and saved views (implies tasks:read)."
    },
    {
      "scope": "projects:read",
      "description": "Read projects, their members, resources, statistics, goals and roadmaps."
    },
    {
      "scope": "projects:write",
      "description": "Create, update and delete projects, their members, resources and goals (implies projects:read)."
    },
    {
      "scope": "teams:read",
      "description": "Read teams, their members, sprints, milestones and availability."
    },
    {
      "scope": "teams:write",
      "description": "Create, update and delete teams, their members, sprints, milestones and availability (implies teams:read)."
    },
    {
      "scope": "org:read",
      "description": "Read the organization, its settings, members, invites, designations, access tokens and access review."
    },
    {
      "scope": "org:write",
      "description": "Change the organization's settings, members, invites and designations; mint, rotate and revoke access tokens and service accounts (implies org:read)."
    },
    {
      "scope": "webhooks:read",
      "description": "Read the organization's webhooks and their delivery logs (owner / admin, or a service account)."
    },
    {
      "scope": "webhooks:write",
      "description": "Create, change, pause, test, rotate and delete webhooks and replay deliveries (implies webhooks:read)."
    },
    {
      "scope": "admin",
      "description": "Every scope, including the audit log."
    }
  ],
  "x-limits": {
    "rate_limit_per_minute": {
      "live": 600,
      "test": 60
    },
    "idempotency_key_ttl_hours": 24,
    "webhook_delivery": {
      "max_attempts": 8,
      "retry_schedule_seconds": [
        0,
        30,
        120,
        600,
        1800,
        7200,
        21600,
        43200
      ],
      "response_timeout_seconds": 20,
      "secret_rotation_grace_hours": 24,
      "retry_after_cap_seconds": 21600,
      "disable_after_consecutive_failures": 10
    }
  }
}
