Tickets
Task management.
12 actions. Each is callable by the agent as a tool, over HTTP via /api/invoke, and (usually) from a UI page.
tickets.set_fields
POST · mutating
Set user-defined (custom) field values on a task/record. Pass customFields as a map of project_fields.id → value. Merges with existing values.
- AI tool:
tickets_set_fields - API:
POST /api/invoke/tickets.set_fields
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
customFields |
object | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"customFields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"id",
"customFields"
]
}tickets.list
GET
List tickets — the unified work primitive (tasks, bugs, docs, content-drafts, decisions, engagements, imported items). Filter by project, mission, subject, kind, status, assignee.
- AI tool:
tickets_list - API:
GET /api/invoke/tickets.list
Input
| Field | Type | Required | Description |
|---|---|---|---|
projectId |
string | — | |
projectIds |
string[] | — | |
hasProject |
boolean | — | |
missionId |
string | — | |
subjectId |
string | — | |
kind |
"task" | "bug" | "doc" | "idea" | "content-draft" | "decision" | "engagement" | "mission-approval" | "imported" | "capability-request" | — | |
kinds |
string[] | — | |
status |
string | — | |
assigneeId |
string | — | |
openOnly |
boolean | — | |
q |
string | — | |
orderBy |
"updated" | "created" | "title" | "kind" | "status" | "priority" | "due" | "project" | — | |
orderDir |
"asc" | "desc" | — | |
limit |
integer | — | |
offset |
integer | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1
},
"projectIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"hasProject": {
"type": "boolean"
},
"missionId": {
"type": "string",
"minLength": 1
},
"subjectId": {
"type": "string",
"minLength": 1
},
"kind": {
"type": "string",
"enum": [
"task",
"bug",
"doc",
"idea",
"content-draft",
"decision",
"engagement",
"mission-approval",
"imported",
"capability-request"
]
},
"kinds": {
"type": "array",
"items": {
"type": "string",
"enum": [
"task",
"bug",
"doc",
"idea",
"content-draft",
"decision",
"engagement",
"mission-approval",
"imported",
"capability-request"
]
}
},
"status": {
"type": "string"
},
"assigneeId": {
"type": "string",
"minLength": 1
},
"openOnly": {
"default": false,
"type": "boolean"
},
"q": {
"type": "string"
},
"orderBy": {
"type": "string",
"enum": [
"updated",
"created",
"title",
"kind",
"status",
"priority",
"due",
"project"
]
},
"orderDir": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"limit": {
"default": 100,
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
}tickets.facets
GET
Aggregate facets for the cross-project Tasks surface: per-project status counts, kind counts, and the grand total over project-bearing tickets. Computed with GROUP BY in the DB so the client never loads every ticket to chart or count them.
- AI tool:
tickets_facets - API:
GET /api/invoke/tickets.facets
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}tickets.get
GET
Get one ticket by id, plus its comments, child tickets, and history (audit log).
- AI tool:
tickets_get - API:
GET /api/invoke/tickets.get
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
]
}tickets.create
POST · mutating
Create a ticket. Pick the right kind: "task" for generic work, "bug" for defects, "doc" for writing, "content-draft" for social posts (agent populates payload with platform/content), "decision" for an agent-proposed action awaiting human approval, "capability-request" when YOU (the agent) need a tool/integration/data source that doesn't exist yet. Always populate trigger with provenance ("From #engineering @sarah: …") on agent-created tickets so the audit trail is real.
When the agent calls it: Use kind="capability-request" when you discover you can't do something the user asked for because a tool / integration / data source / workflow is missing. Example: user asks you to post to dev.to → no dev.to tool exists → file a capability-request instead of pretending it's impossible. Title format: "Add
integration" / "Add tool". Description: 1-2 sentences saying what you need + what you tried. Payload should include { category: 'integration' | 'tool' | 'knowledge' | 'workflow' | 'data' | 'other', what: string, why: string, attempts: string[], suggestedSolution?: string }. After filing, tell the user the ticket id + offer the best available workaround.
- AI tool:
tickets_create - API:
POST /api/invoke/tickets.create
Input
| Field | Type | Required | Description |
|---|---|---|---|
kind |
"task" | "bug" | "doc" | "idea" | "content-draft" | "decision" | "engagement" | "mission-approval" | "imported" | "capability-request" | yes | |
projectId |
union | — | |
missionId |
union | — | |
subjectId |
union | — | |
parentId |
union | — | |
title |
string | yes | |
description |
string | — | |
status |
string | — | |
priority |
"low" | "normal" | "high" | "urgent" | — | |
labels |
string[] | — | |
customFields |
object | — | |
assigneeIds |
string[] | — | |
createdBy |
union | — | |
dueDate |
union | — | |
startDate |
union | — | |
scheduledFor |
union | — | |
completedAt |
union | — | |
reasoning |
union | — | |
confidence |
union | — | |
proposedActions |
object[] | — | |
requiresApproval |
boolean | — | |
externalRef |
union | — | |
externalProvider |
union | — | |
externalUrl |
union | — | |
trigger |
union | — | |
payload |
object | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"task",
"bug",
"doc",
"idea",
"content-draft",
"decision",
"engagement",
"mission-approval",
"imported",
"capability-request"
]
},
"projectId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"missionId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"subjectId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"parentId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"description": {
"default": "",
"type": "string"
},
"status": {
"default": "open",
"type": "string"
},
"priority": {
"default": "normal",
"type": "string",
"enum": [
"low",
"normal",
"high",
"urgent"
]
},
"labels": {
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"customFields": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"assigneeIds": {
"default": [],
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"createdBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"dueDate": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"startDate": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"scheduledFor": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"completedAt": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"reasoning": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"proposedActions": {
"default": [],
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"target": {
"type": "string"
},
"params": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
]
}
},
"requiresApproval": {
"default": false,
"type": "boolean"
},
"externalRef": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"externalProvider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"externalUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"user-prompt",
"chat-message",
"rule-fired",
"scheduled",
"cascading",
"webhook",
"manual"
]
},
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"ruleId": {
"type": "string",
"minLength": 1
},
"parentTicketId": {
"type": "string",
"minLength": 1
},
"chatTurnId": {
"type": "string"
},
"actorId": {
"type": "string",
"minLength": 1
},
"attribution": {
"type": "string"
},
"sourceUrl": {
"type": "string"
}
},
"required": [
"kind",
"attribution"
]
},
{
"type": "null"
}
]
},
"payload": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"kind",
"title"
]
}tickets.update
PATCH · mutating
Update ticket fields (status, priority, assignees, dates, labels, payload).
- AI tool:
tickets_update - API:
PATCH /api/invoke/tickets.update
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
patch |
object | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"patch": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"kind": {
"type": "string",
"enum": [
"task",
"bug",
"doc",
"idea",
"content-draft",
"decision",
"engagement",
"mission-approval",
"imported",
"capability-request"
]
},
"projectId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"missionId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"subjectId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"parentId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"description": {
"default": "",
"type": "string"
},
"status": {
"default": "open",
"type": "string"
},
"priority": {
"default": "normal",
"type": "string",
"enum": [
"low",
"normal",
"high",
"urgent"
]
},
"labels": {
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"customFields": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"assigneeIds": {
"default": [],
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"createdBy": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"dueDate": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"startDate": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"scheduledFor": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"completedAt": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"reasoning": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"proposedActions": {
"default": [],
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"target": {
"type": "string"
},
"params": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"action"
]
}
},
"requiresApproval": {
"default": false,
"type": "boolean"
},
"externalRef": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"externalProvider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"externalUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"trigger": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"user-prompt",
"chat-message",
"rule-fired",
"scheduled",
"cascading",
"webhook",
"manual"
]
},
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"ruleId": {
"type": "string",
"minLength": 1
},
"parentTicketId": {
"type": "string",
"minLength": 1
},
"chatTurnId": {
"type": "string"
},
"actorId": {
"type": "string",
"minLength": 1
},
"attribution": {
"type": "string"
},
"sourceUrl": {
"type": "string"
}
},
"required": [
"kind",
"attribution"
]
},
{
"type": "null"
}
]
},
"payload": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"createdAt": {},
"updatedAt": {}
}
}
},
"required": [
"id",
"patch"
]
}tickets.set_status
POST · mutating
Shorthand to update a ticket's status — fires the kanban-column move events for any listeners.
- AI tool:
tickets_set_status - API:
POST /api/invoke/tickets.set_status
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
status |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"status": {
"type": "string"
}
},
"required": [
"id",
"status"
]
}tickets.assign
POST · mutating
Assign a ticket to one or more actors (humans or agents).
- AI tool:
tickets_assign - API:
POST /api/invoke/tickets.assign
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
assigneeIds |
string[] | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"assigneeIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"id",
"assigneeIds"
]
}tickets.comment
POST · mutating
Post a comment on a ticket.
- AI tool:
tickets_comment - API:
POST /api/invoke/tickets.comment
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
body |
string | yes | |
actorId |
string | — | |
parentId |
string | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string"
},
"actorId": {
"type": "string",
"minLength": 1
},
"parentId": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"body"
]
}tickets.history
GET
List a ticket's history / audit log — who changed what, when (created, field updates, status moves, assignments, comments).
- AI tool:
tickets_history - API:
GET /api/invoke/tickets.history
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
limit |
integer | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"id"
]
}tickets.search
GET
Free-text search over tickets (FTS over title + description).
- AI tool:
tickets_search - API:
GET /api/invoke/tickets.search
Input
| Field | Type | Required | Description |
|---|---|---|---|
q |
string | yes | |
projectId |
string | — | |
missionId |
string | — | |
limit |
integer | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"q": {
"type": "string"
},
"projectId": {
"type": "string",
"minLength": 1
},
"missionId": {
"type": "string",
"minLength": 1
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"q"
]
}tickets.backfill
POST · mutating
Idempotently mirror existing post_drafts, decisions, and engagements into the unified tickets table so they show up on the universal board.
- AI tool:
tickets_backfill - API:
POST /api/invoke/tickets.backfill
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": {}
}