by N1

Hub API

Your scripts and services act on your behalf with the same permissions as your agent.

Base URL: https://hub.n1.team/api/v1. Keep the key on your server or in a local script. This API is for server-side clients; cross-origin browser requests are not supported. The app’s internal /api is not a public contract.

Get started

Create a personal key on the Agents page. Save it as N1_HUB_KEY where your script runs. This is the same key used for MCP; cookies and the emergency bootstrap token are not accepted.

My keys OpenAPI 3.1 JSON

Create a task

curl --fail-with-body -X POST 'https://hub.n1.team/api/v1/tasks' \
  -H "Authorization: Bearer $N1_HUB_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"title":"Check the user journey"}'

HTTP 200 returns the task resource. The same title by the same person within ten minutes returns the existing task. Agent tasks without acceptance grounds enter triage.

Read a task

curl --fail-with-body -X GET 'https://hub.n1.team/api/v1/tasks/HUB-123' \
  -H "Authorization: Bearer $N1_HUB_KEY"

Update a task

curl --fail-with-body -X PATCH 'https://hub.n1.team/api/v1/tasks/HUB-123' \
  -H "Authorization: Bearer $N1_HUB_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"plannedStart":"2026-11-02","dueDate":"2026-11-06"}'

plannedStart and dueDate are date-only values; null clears either date. The start cannot follow the deadline; dates are not moved automatically. To protect text from another edit, send expectedDescription containing the original description. For dates, send expectedDates with both original plannedStart/dueDate values.409 leaves all task fields unchanged.

Read a metric

curl --fail-with-body -X POST 'https://hub.n1.team/api/v1/metrics/query' \
  -H "Authorization: Bearer $N1_HUB_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"product":"your-product","ref":"events.count:open","days":28}'

Replace product with your product code and ref with a metric reference from the Hub. days defaults to 28, with a maximum of 730. Instead, supply both from and to (YYYY-MM-DD), spanning at most 730 inclusive days. Numbers include their source, data date, missing values and caveats. Missing means null, not zero. Currency metrics use major units; amounts names the scale.

Team work process

curl --fail-with-body -X GET 'https://hub.n1.team/api/v1/workflow' \
  -H "Authorization: Bearer $N1_HUB_KEY"

PUT /workflow saves the full config and mandatory expectedVersion from the read. Owner or owner agent with reason; stale409 creates no partial version. Add, rename or reorder columns/types. Removing existing ids or changing a column category is rejected. Task fields columnId and taskTypeId are additive; status retains the category for legacy clients. Configuration does not launch or reassign agents.

Contract and limits

Up to 120 requests per minute per key, shared with MCP. Request bodies: up to 256 KiB; Content-Type: application/json. Workspace quotas and product permissions apply. Key revocation, membership removal and narrowed access take effect on the next request. Private responses must not be cached.

This version creates, reads and updates a task, reads a numeric metric and configures the team work process and sprint planning. GET /planning reads settings; PUT /planning changes them as owner. GET /cycles and /cycles/{ref} read cycles; PATCH /cycles/{ref} updates the goal. Permissions match MCP. Tasks include counts, not history, comments or attachments; metrics omit task annotations. Cursor-based collections and other operations follow separately. v1 may add fields; incompatible changes require a new version.

Errors

Errors contain code, message and hint (a string or null). 400: invalid request; 401: key not accepted; 403: forbidden action; 404: unavailable object; 409: stale description, planning dates or process version; 413/415: body or format; 429: rate limit or quota (Retry-After for rate limits); 500: internal error. Do not blindly repeat a write whose result is unknown.

{"code":"unauthorized","message":"…","hint":null}

Reads can be retried: honor Retry-After for 429 and use backoff with jitter for temporary 5xx errors. Task creation does not support Idempotency-Key: recent-title deduplication is not a general idempotency guarantee. After a write timeout, check the result in the Hub first.

Schema reference

The field names, required fields, allowed values and constraints below come from the same schemas that validate requests. Import OpenAPI into Postman or a client generator. Responses are JSON; dates and timestamps are ISO strings. Share X-Request-Id with support, never your key.

PlanningInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "kanban",
        "cycles"
      ]
    },
    "cycleWeeks": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "cycleStartDay": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    },
    "timeZone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "triage": {
      "type": "boolean"
    },
    "staleDays": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
CycleGoalInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "goal": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ]
    },
    "expectedActor": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "goal"
  ],
  "additionalProperties": false
}
Roadmap
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "productId": {
      "type": "string"
    },
    "product": {
      "type": "string"
    },
    "version": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "author": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "userId": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            },
            "avatarUrl": {
              "type": [
                "string",
                "null"
              ]
            },
            "agent": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "userId",
            "name",
            "email",
            "avatarUrl",
            "agent"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "items": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "feature",
              "release"
            ]
          },
          "title": {
            "type": "string"
          },
          "plannedStart": {
            "type": [
              "string",
              "null"
            ]
          },
          "targetDate": {
            "type": [
              "string",
              "null"
            ]
          },
          "goal": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "title"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "taskCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "archived": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "kind",
          "title",
          "plannedStart",
          "targetDate",
          "goal",
          "taskCount",
          "archived"
        ],
        "additionalProperties": false
      }
    },
    "nextOffset": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "total": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "productId",
    "product",
    "version",
    "updatedAt",
    "author",
    "items",
    "nextOffset",
    "total"
  ],
  "additionalProperties": false
}
RoadmapItem
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "kind": {
      "type": "string",
      "enum": [
        "feature",
        "release"
      ]
    },
    "title": {
      "type": "string"
    },
    "plannedStart": {
      "type": [
        "string",
        "null"
      ]
    },
    "targetDate": {
      "type": [
        "string",
        "null"
      ]
    },
    "goal": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "title"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "taskCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "archived": {
      "type": "boolean"
    },
    "productId": {
      "type": "string"
    },
    "version": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "description": {
      "type": "string"
    },
    "taskKeys": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "tasks": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "title",
          "status"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "id",
    "kind",
    "title",
    "plannedStart",
    "targetDate",
    "goal",
    "taskCount",
    "archived",
    "productId",
    "version",
    "description",
    "taskKeys",
    "tasks"
  ],
  "additionalProperties": false
}
RoadmapSave
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "feature",
        "release"
      ]
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "default": "",
      "type": "string",
      "maxLength": 5000
    },
    "goal": {
      "default": null,
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        {
          "type": "null"
        }
      ]
    },
    "plannedStart": {
      "default": null,
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "targetDate": {
      "default": null,
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "tasks": {
      "default": [],
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      }
    },
    "archived": {
      "default": false,
      "type": "boolean"
    },
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "expectedVersion": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "expectedProductId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "required": [
    "kind",
    "title",
    "description",
    "goal",
    "plannedStart",
    "targetDate",
    "tasks",
    "archived",
    "expectedVersion"
  ],
  "additionalProperties": false
}
TaskTransitionPreviewInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "expectedActor": {
      "description": "Optional original user/workspace binding, not an identity to act as. A mismatch rejects the request with 403 before writes; key-bound clients may omit it.",
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "expectedStageRevision": {
      "description": "Read the task first and pass its stageRevision to reject a changed stage, executor, assignment source, task type, product or site context. Legacy omission remains unconditional.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedWorkflowVersion": {
      "description": "Pass the workflowVersion from a transition preview to reject changed process rules before writing.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "status": {
      "type": "string",
      "enum": [
        "triage",
        "backlog",
        "todo",
        "in_progress",
        "review",
        "done"
      ]
    },
    "columnId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "taskTypeId": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "assignee": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "assignmentMode": {
      "type": "string",
      "const": "process"
    },
    "comment": {
      "type": "string",
      "maxLength": 10000
    },
    "estimate": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "S",
            "M",
            "L"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "progression": {
      "type": "string",
      "const": "next"
    },
    "reviewDecision": {
      "description": "Preview the common Review decision, including restoration of the previous working executor. Do not combine with status, taskTypeId, assignmentMode or estimate.",
      "type": "string",
      "enum": [
        "approve",
        "request_changes"
      ]
    }
  },
  "additionalProperties": false
}
TaskTransitionPreview
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "key": {
      "type": "string"
    },
    "stageRevision": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "workflowVersion": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "current": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "triage",
            "backlog",
            "todo",
            "in_progress",
            "review",
            "done"
          ]
        },
        "columnId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "taskTypeId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "assignee": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "userId": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                },
                "keyId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "userId",
                "keyId"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "responsibleUserId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "status",
        "columnId",
        "taskTypeId",
        "assignee",
        "responsibleUserId"
      ],
      "additionalProperties": false
    },
    "next": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "triage",
            "backlog",
            "todo",
            "in_progress",
            "review",
            "done"
          ]
        },
        "columnId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "taskTypeId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "assignee": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "userId": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                },
                "keyId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "userId",
                "keyId"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "responsibleUserId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "status",
        "columnId",
        "taskTypeId",
        "assignee",
        "responsibleUserId"
      ],
      "additionalProperties": false
    },
    "assignment": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string",
          "enum": [
            "manual",
            "process",
            "inherited"
          ]
        },
        "ruleId": {
          "type": [
            "string",
            "null"
          ]
        },
        "ruleKind": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "type_column",
                "column",
                "type",
                "default"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "workflowVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "source",
        "ruleId",
        "ruleKind",
        "workflowVersion"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "key",
    "stageRevision",
    "workflowVersion",
    "current",
    "next",
    "assignment"
  ],
  "additionalProperties": false
}
ReviewInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "progression": {
      "description": "Approve only the current Review stage and advance to the next configured active/review/done column. Omitted preserves legacy approve-to-Done semantics. Explicit columnId wins.",
      "type": "string",
      "const": "next"
    },
    "expectedWorkflowVersion": {
      "description": "Pass the workflowVersion from a transition preview to reject changed process rules before writing.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "assignee": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "expectedStageRevision": {
      "description": "Read the task first and pass its stageRevision to reject a changed stage, executor, assignment source, task type, product or site context. Legacy omission remains unconditional.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "description": "Optional original user/workspace binding, not an identity to act as. A mismatch rejects the request with 403 before writes; key-bound clients may omit it.",
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "columnId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "decision": {
      "type": "string",
      "enum": [
        "approve",
        "request_changes"
      ]
    },
    "comment": {
      "type": "string",
      "maxLength": 10000
    }
  },
  "required": [
    "decision"
  ],
  "additionalProperties": false
}
CompleteStageInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "runId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "stageRevision": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "action": {
      "type": "string",
      "enum": [
        "submit",
        "approve",
        "request_changes"
      ]
    },
    "comment": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000
    },
    "columnId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "links": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2000,
            "pattern": "^https?:\\/\\/"
          },
          "title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "assignee": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "expectedWorkflowVersion": {
      "description": "Pass the workflowVersion from a transition preview to reject changed process rules before writing.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "runId",
    "stageRevision",
    "action",
    "comment"
  ],
  "additionalProperties": false
}
NextTaskInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
StageResult
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "task": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "triage",
            "backlog",
            "todo",
            "in_progress",
            "review",
            "done"
          ]
        },
        "columnId": {
          "type": [
            "string",
            "null"
          ]
        },
        "taskTypeId": {
          "type": [
            "string",
            "null"
          ]
        },
        "responsible": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "email"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "assignment": {
          "type": "object",
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "manual",
                "process",
                "inherited"
              ]
            },
            "ruleId": {
              "type": [
                "string",
                "null"
              ]
            },
            "ruleKind": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "type_column",
                    "column",
                    "type",
                    "default"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "workflowVersion": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "source",
            "ruleId",
            "ruleKind",
            "workflowVersion"
          ],
          "additionalProperties": false
        },
        "stageRevision": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "deliveryMode": {
          "type": "string",
          "enum": [
            "deploy",
            "no_deploy"
          ]
        },
        "deliveryReason": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ]
        },
        "priority": {
          "type": "string",
          "enum": [
            "none",
            "low",
            "medium",
            "high",
            "urgent"
          ]
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "assignee": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "agent": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "email",
                "agent"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "product": {
          "type": [
            "string",
            "null"
          ]
        },
        "site": {
          "type": [
            "string",
            "null"
          ]
        },
        "pageUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "plannedStart": {
          "type": [
            "string",
            "null"
          ]
        },
        "dueDate": {
          "type": [
            "string",
            "null"
          ]
        },
        "reviewAfter": {
          "type": [
            "string",
            "null"
          ]
        },
        "estimate": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "S",
                "M",
                "L"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "goal": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "parent": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "key": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "key",
                "title"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "cycle": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        },
        "checklist": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "done": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "total": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "done",
                "total"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "subtasks": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "done": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "total": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "done",
                "total"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "comments": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "linkList": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "url",
              "title"
            ],
            "additionalProperties": false
          }
        },
        "queries": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "outcome": {
          "type": [
            "string",
            "null"
          ]
        },
        "hypothesis": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "metric": {
                  "type": "string",
                  "minLength": 3,
                  "maxLength": 300
                },
                "direction": {
                  "type": "string",
                  "enum": [
                    "increase",
                    "decrease"
                  ]
                },
                "minChange": {
                  "type": "number",
                  "minimum": 0.01,
                  "maximum": 10
                }
              },
              "required": [
                "metric",
                "direction",
                "minChange"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "createdBy": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "agent": {
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "additionalProperties": false
        },
        "createdAt": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        },
        "completedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "archivedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "workingAgent": {
          "type": [
            "string",
            "null"
          ]
        },
        "activeRun": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "runId": {
                  "type": "string"
                },
                "keyId": {
                  "type": "string"
                },
                "columnId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "stageRevision": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "startedAt": {
                  "type": "string"
                },
                "lastSeenAt": {
                  "type": "string"
                }
              },
              "required": [
                "runId",
                "keyId",
                "columnId",
                "stageRevision",
                "startedAt",
                "lastSeenAt"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "key",
        "title",
        "description",
        "status",
        "columnId",
        "taskTypeId",
        "responsible",
        "assignment",
        "stageRevision",
        "deliveryMode",
        "deliveryReason",
        "priority",
        "labels",
        "assignee",
        "product",
        "site",
        "pageUrl",
        "plannedStart",
        "dueDate",
        "reviewAfter",
        "estimate",
        "goal",
        "parent",
        "cycle",
        "checklist",
        "subtasks",
        "comments",
        "linkList",
        "queries",
        "outcome",
        "hypothesis",
        "createdBy",
        "createdAt",
        "updatedAt",
        "completedAt",
        "archivedAt",
        "workingAgent",
        "activeRun"
      ],
      "additionalProperties": false
    },
    "runId": {
      "type": "string"
    },
    "replayed": {
      "type": "boolean"
    }
  },
  "required": [
    "task",
    "runId",
    "replayed"
  ],
  "additionalProperties": false
}
Workflow
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "properties": {
        "columns": {
          "minItems": 5,
          "maxItems": 16,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "status": {
                "type": "string",
                "enum": [
                  "backlog",
                  "todo",
                  "in_progress",
                  "review",
                  "done"
                ]
              },
              "label": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "status",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "types": {
          "maxItems": 24,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              }
            },
            "required": [
              "id",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "primaryColumns": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "backlog",
              "todo",
              "in_progress",
              "review",
              "done"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
          },
          "required": [
            "backlog",
            "todo",
            "in_progress",
            "review",
            "done"
          ]
        }
      },
      "required": [
        "columns",
        "types",
        "primaryColumns"
      ],
      "additionalProperties": false
    },
    "routing": {
      "type": "object",
      "properties": {
        "defaultAssignee": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "userId": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                },
                "keyId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "userId",
                "keyId"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "rules": {
          "maxItems": 64,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "columnId": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "taskTypeId": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "assignee": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "string",
                        "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                      },
                      "keyId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "userId",
                      "keyId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "assignee"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "rules"
      ],
      "additionalProperties": false
    },
    "version": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "updatedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "author": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "userId": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            },
            "avatarUrl": {
              "type": [
                "string",
                "null"
              ]
            },
            "agent": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "userId",
            "name",
            "email",
            "avatarUrl",
            "agent"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "reason": {
      "type": [
        "string",
        "null"
      ]
    },
    "canManage": {
      "type": "boolean"
    },
    "history": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "createdAt": {
            "type": "string"
          },
          "author": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "email": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "avatarUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "agent": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "userId",
              "name",
              "email",
              "avatarUrl",
              "agent"
            ],
            "additionalProperties": false
          },
          "via": {
            "type": "string",
            "enum": [
              "web",
              "agent"
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "version",
          "createdAt",
          "author",
          "via",
          "reason"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "config",
    "version",
    "updatedAt",
    "author",
    "reason",
    "canManage",
    "history"
  ],
  "additionalProperties": false
}
WorkflowSave
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "config": {
      "type": "object",
      "properties": {
        "columns": {
          "minItems": 5,
          "maxItems": 16,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "status": {
                "type": "string",
                "enum": [
                  "backlog",
                  "todo",
                  "in_progress",
                  "review",
                  "done"
                ]
              },
              "label": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "status",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "types": {
          "maxItems": 24,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              }
            },
            "required": [
              "id",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "primaryColumns": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "backlog",
              "todo",
              "in_progress",
              "review",
              "done"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
          },
          "required": [
            "backlog",
            "todo",
            "in_progress",
            "review",
            "done"
          ]
        }
      },
      "required": [
        "columns",
        "types",
        "primaryColumns"
      ],
      "additionalProperties": false
    },
    "routing": {
      "type": "object",
      "properties": {
        "defaultAssignee": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "userId": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                },
                "keyId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "userId",
                "keyId"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "rules": {
          "maxItems": 64,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "columnId": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "taskTypeId": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
              },
              "assignee": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "string",
                        "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                      },
                      "keyId": {
                        "anyOf": [
                          {
                            "type": "string",
                            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "userId",
                      "keyId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "assignee"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "rules"
      ],
      "additionalProperties": false
    },
    "expectedVersion": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    }
  },
  "required": [
    "config",
    "expectedVersion"
  ],
  "additionalProperties": false
}
TaskInput
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "expectedWorkflowVersion": {
      "description": "Pass the workflowVersion from a transition preview to reject changed process rules before writing.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "description": "Optional original user/workspace binding, not an identity to act as. A mismatch rejects the request with 403 before writes; key-bound clients may omit it.",
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "deliveryMode": {
      "description": "deploy by default; no_deploy for results needing no deployment. An explicit decision requires deliveryReason.",
      "type": "string",
      "enum": [
        "deploy",
        "no_deploy"
      ]
    },
    "deliveryReason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 20000
    },
    "priority": {
      "type": "string",
      "enum": [
        "none",
        "low",
        "medium",
        "high",
        "urgent"
      ]
    },
    "labels": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9-]{0,23}$"
      }
    },
    "assignee": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "columnId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "taskTypeId": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "responsible": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "product": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "site": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "pageUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000,
          "pattern": "^https?:\\/\\/"
        },
        {
          "type": "null"
        }
      ]
    },
    "queries": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "plannedStart": {
      "description": "Intended date-only start of work; null clears it. Never inferred from creation or actual execution timestamps. Must not follow dueDate when both dates exist.",
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "dueDate": {
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "reviewAfter": {
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "hypothesis": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "metric": {
              "type": "string",
              "minLength": 3,
              "maxLength": 300
            },
            "direction": {
              "type": "string",
              "enum": [
                "increase",
                "decrease"
              ]
            },
            "minChange": {
              "type": "number",
              "minimum": 0.01,
              "maximum": 10
            }
          },
          "required": [
            "metric",
            "direction",
            "minChange"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "goal": {
      "description": "Product objective or key result id; null unlinks. An objective without a metric does not create a hypothesis or measurement.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "parent": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "cycle": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "current",
                "next",
                "previous"
              ]
            },
            {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "estimate": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "S",
            "M",
            "L"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "links": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2000,
            "pattern": "^https?:\\/\\/"
          },
          "title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "comment": {
      "description": "Added with the change. An agent closing a task (status \"done\") must give the grounds here: who approved it, what was checked.",
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "status": {
      "type": "string",
      "enum": [
        "triage",
        "backlog",
        "todo",
        "in_progress",
        "review",
        "done"
      ]
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false
}
TaskUpdate
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "expectedDelivery": {
      "type": "object",
      "properties": {
        "deliveryMode": {
          "type": "string",
          "enum": [
            "deploy",
            "no_deploy"
          ]
        },
        "deliveryReason": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "deliveryMode",
        "deliveryReason"
      ],
      "additionalProperties": false
    },
    "expectedStageRevision": {
      "description": "Read the task first and pass its stageRevision to reject a changed stage, executor, assignment source, task type, product or site context. Legacy omission remains unconditional.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "assignmentMode": {
      "type": "string",
      "const": "process"
    },
    "expectedDescription": {
      "description": "Original description baseline. A mismatch rejects the entire update atomically with 409; omitted preserves last-writer behaviour.",
      "type": "string",
      "maxLength": 20000
    },
    "expectedDates": {
      "description": "Both original nullable planning dates. A mismatch rejects the entire update atomically with 409; omitted preserves last-writer behaviour.",
      "type": "object",
      "properties": {
        "plannedStart": {
          "anyOf": [
            {
              "type": "string",
              "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
              "format": "date"
            },
            {
              "type": "null"
            }
          ]
        },
        "dueDate": {
          "anyOf": [
            {
              "type": "string",
              "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
              "format": "date"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "plannedStart",
        "dueDate"
      ],
      "additionalProperties": false
    },
    "expectedWorkflowVersion": {
      "description": "Pass the workflowVersion from a transition preview to reject changed process rules before writing.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expectedActor": {
      "description": "Optional original user/workspace binding, not an identity to act as. A mismatch rejects the request with 403 before writes; key-bound clients may omit it.",
      "type": "object",
      "properties": {
        "userId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "workspaceId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        }
      },
      "required": [
        "userId",
        "workspaceId"
      ],
      "additionalProperties": false
    },
    "deliveryMode": {
      "description": "deploy by default; no_deploy for results needing no deployment. An explicit decision requires deliveryReason.",
      "type": "string",
      "enum": [
        "deploy",
        "no_deploy"
      ]
    },
    "deliveryReason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 20000
    },
    "priority": {
      "type": "string",
      "enum": [
        "none",
        "low",
        "medium",
        "high",
        "urgent"
      ]
    },
    "labels": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9-]{0,23}$"
      }
    },
    "assignee": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "columnId": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
    },
    "taskTypeId": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "responsible": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "product": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "site": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "pageUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000,
          "pattern": "^https?:\\/\\/"
        },
        {
          "type": "null"
        }
      ]
    },
    "queries": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "plannedStart": {
      "description": "Intended date-only start of work; null clears it. Never inferred from creation or actual execution timestamps. Must not follow dueDate when both dates exist.",
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "dueDate": {
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "reviewAfter": {
      "anyOf": [
        {
          "type": "string",
          "description": "Real calendar date YYYY-MM-DD, years 0001–9999; no time or timezone.",
          "format": "date"
        },
        {
          "type": "null"
        }
      ]
    },
    "hypothesis": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "metric": {
              "type": "string",
              "minLength": 3,
              "maxLength": 300
            },
            "direction": {
              "type": "string",
              "enum": [
                "increase",
                "decrease"
              ]
            },
            "minChange": {
              "type": "number",
              "minimum": 0.01,
              "maximum": 10
            }
          },
          "required": [
            "metric",
            "direction",
            "minChange"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "goal": {
      "description": "Product objective or key result id; null unlinks. An objective without a metric does not create a hypothesis or measurement.",
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "parent": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "cycle": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "current",
                "next",
                "previous"
              ]
            },
            {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "estimate": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "S",
            "M",
            "L"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "links": {
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2000,
            "pattern": "^https?:\\/\\/"
          },
          "title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "comment": {
      "description": "Added with the change. An agent closing a task (status \"done\") must give the grounds here: who approved it, what was checked.",
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "status": {
      "type": "string",
      "enum": [
        "triage",
        "backlog",
        "todo",
        "in_progress",
        "review",
        "done"
      ]
    },
    "outcome": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 5000
        },
        {
          "type": "null"
        }
      ]
    },
    "archived": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
Task
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "key": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "triage",
        "backlog",
        "todo",
        "in_progress",
        "review",
        "done"
      ]
    },
    "columnId": {
      "type": [
        "string",
        "null"
      ]
    },
    "taskTypeId": {
      "type": [
        "string",
        "null"
      ]
    },
    "responsible": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "id",
            "name",
            "email"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "assignment": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string",
          "enum": [
            "manual",
            "process",
            "inherited"
          ]
        },
        "ruleId": {
          "type": [
            "string",
            "null"
          ]
        },
        "ruleKind": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "type_column",
                "column",
                "type",
                "default"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "workflowVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "source",
        "ruleId",
        "ruleKind",
        "workflowVersion"
      ],
      "additionalProperties": false
    },
    "stageRevision": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "deliveryMode": {
      "type": "string",
      "enum": [
        "deploy",
        "no_deploy"
      ]
    },
    "deliveryReason": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ]
    },
    "priority": {
      "type": "string",
      "enum": [
        "none",
        "low",
        "medium",
        "high",
        "urgent"
      ]
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "assignee": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            },
            "agent": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "name"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "email",
            "agent"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "product": {
      "type": [
        "string",
        "null"
      ]
    },
    "site": {
      "type": [
        "string",
        "null"
      ]
    },
    "pageUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "plannedStart": {
      "type": [
        "string",
        "null"
      ]
    },
    "dueDate": {
      "type": [
        "string",
        "null"
      ]
    },
    "reviewAfter": {
      "type": [
        "string",
        "null"
      ]
    },
    "estimate": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "S",
            "M",
            "L"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "goal": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "title"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "parent": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "key": {
              "type": [
                "string",
                "null"
              ]
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "key",
            "title"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "cycle": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "checklist": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "done": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "done",
            "total"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "subtasks": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "done": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "done",
            "total"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "comments": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "linkList": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "url",
          "title"
        ],
        "additionalProperties": false
      }
    },
    "queries": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "outcome": {
      "type": [
        "string",
        "null"
      ]
    },
    "hypothesis": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "metric": {
              "type": "string",
              "minLength": 3,
              "maxLength": 300
            },
            "direction": {
              "type": "string",
              "enum": [
                "increase",
                "decrease"
              ]
            },
            "minChange": {
              "type": "number",
              "minimum": 0.01,
              "maximum": 10
            }
          },
          "required": [
            "metric",
            "direction",
            "minChange"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "createdBy": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "agent": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "createdAt": {
      "type": "string"
    },
    "updatedAt": {
      "type": "string"
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "archivedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "workingAgent": {
      "type": [
        "string",
        "null"
      ]
    },
    "activeRun": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "runId": {
              "type": "string"
            },
            "keyId": {
              "type": "string"
            },
            "columnId": {
              "type": [
                "string",
                "null"
              ]
            },
            "stageRevision": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "startedAt": {
              "type": "string"
            },
            "lastSeenAt": {
              "type": "string"
            }
          },
          "required": [
            "runId",
            "keyId",
            "columnId",
            "stageRevision",
            "startedAt",
            "lastSeenAt"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "key",
    "title",
    "description",
    "status",
    "columnId",
    "taskTypeId",
    "responsible",
    "assignment",
    "stageRevision",
    "deliveryMode",
    "deliveryReason",
    "priority",
    "labels",
    "assignee",
    "product",
    "site",
    "pageUrl",
    "plannedStart",
    "dueDate",
    "reviewAfter",
    "estimate",
    "goal",
    "parent",
    "cycle",
    "checklist",
    "subtasks",
    "comments",
    "linkList",
    "queries",
    "outcome",
    "hypothesis",
    "createdBy",
    "createdAt",
    "updatedAt",
    "completedAt",
    "archivedAt",
    "workingAgent",
    "activeRun"
  ],
  "additionalProperties": false
}
MetricQuery
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 3,
      "maxLength": 300
    },
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 730
    },
    "granularity": {
      "type": "string",
      "enum": [
        "day",
        "week"
      ]
    },
    "compare": {
      "type": "boolean"
    },
    "product": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "ref",
    "product"
  ],
  "additionalProperties": false
}
MetricSeries
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ref": {
      "type": "string"
    },
    "label": {
      "type": "string"
    },
    "definition": {
      "type": "string"
    },
    "sourceName": {
      "type": "string"
    },
    "caveats": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "kind": {
      "type": "string"
    },
    "lowerIsBetter": {
      "type": "boolean"
    },
    "unit": {
      "type": "string",
      "const": "currency"
    },
    "currency": {
      "type": "string"
    },
    "amounts": {
      "type": "string",
      "enum": [
        "major",
        "minor"
      ]
    },
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "granularity": {
      "type": "string",
      "enum": [
        "day",
        "week"
      ]
    },
    "points": {
      "maxItems": 730,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "value": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "date",
          "value"
        ],
        "additionalProperties": false
      }
    },
    "total": {
      "type": [
        "number",
        "null"
      ]
    },
    "previous": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "from": {
              "type": "string"
            },
            "to": {
              "type": "string"
            },
            "total": {
              "type": [
                "number",
                "null"
              ]
            },
            "points": {
              "maxItems": 730,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "date": {
                    "type": "string"
                  },
                  "value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  }
                },
                "required": [
                  "date",
                  "value"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "from",
            "to",
            "total",
            "points"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "dataThrough": {
      "type": [
        "string",
        "null"
      ]
    },
    "band": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "low": {
              "type": "number"
            },
            "high": {
              "type": "number"
            },
            "weeks": {
              "type": "number"
            },
            "latest": {
              "type": "object",
              "properties": {
                "week": {
                  "type": "string"
                },
                "start": {
                  "type": "string"
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "week",
                "start",
                "value"
              ],
              "additionalProperties": false
            },
            "outside": {
              "type": "boolean"
            }
          },
          "required": [
            "low",
            "high",
            "weeks",
            "latest",
            "outside"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "ref",
    "label",
    "definition",
    "sourceName",
    "caveats",
    "kind",
    "lowerIsBetter",
    "from",
    "to",
    "granularity",
    "points",
    "total",
    "previous",
    "dataThrough"
  ],
  "additionalProperties": false
}
Problem
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "enum": [
        "unauthorized",
        "forbidden",
        "not_found",
        "invalid_request",
        "conflict",
        "invalid_json",
        "unsupported_media_type",
        "payload_too_large",
        "rate_limited",
        "quota_exceeded",
        "internal_error"
      ]
    },
    "message": {
      "type": "string"
    },
    "hint": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "code",
    "message",
    "hint"
  ],
  "additionalProperties": false
}

For the full agent workflow, use MCP.