← capabilitiesprojects.write

create_ticket

projects.create_ticket · v0.1.0

Open a structured support / question / change request against a project (or unscoped).

Semantics

Creates a ClientRequest row with a kind classifier so the owner can route it appropriately. Kinds: `bug`, `question`, `change_request`, `billing_question`, `general`. If `project_id` is provided the ticket is scoped to that project; otherwise it lands in the tenant's general inbox.

Invariants

  • Tickets are append-only via this capability; status transitions are owner-driven (`new` → `triaged` → `in_progress` → `closed`).
  • Same `(email, subject)` within 60s returns the same ticket_id (idempotent window).

When to use

When the user wants to ask a question, report a bug, request a change, or raise a billing concern with a provider. The agent should ask the user to confirm before submitting since this creates a tracked record.

Input schema

{
  "type": "object",
  "required": [
    "requester_name",
    "requester_email",
    "kind",
    "subject",
    "body"
  ],
  "properties": {
    "body": {
      "type": "string",
      "maxLength": 5000,
      "minLength": 1
    },
    "kind": {
      "enum": [
        "bug",
        "question",
        "change_request",
        "billing_question",
        "general"
      ],
      "type": "string"
    },
    "subject": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "project_id": {
      "type": "string",
      "description": "Optional. If present, the ticket is scoped to that project."
    },
    "agent_vendor": {
      "type": "string"
    },
    "requester_name": {
      "type": "string",
      "minLength": 1
    },
    "requester_email": {
      "type": "string",
      "format": "email"
    }
  },
  "additionalProperties": false
}

Output schema

{
  "type": "object",
  "required": [
    "ok"
  ],
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "error": {
      "enum": [
        "invalid_email",
        "invalid_input",
        "tenant_not_found",
        "unknown_project"
      ],
      "type": "string"
    },
    "status": {
      "enum": [
        "new",
        "triaged",
        "in_progress",
        "closed"
      ],
      "type": "string"
    },
    "ticket_id": {
      "type": "string"
    }
  }
}

Recent conformance runs

passprovidertestmswhen
projectkit:switchback-engineeringrejects_invalid_kind005-18 19:53
projectkit:switchback-engineeringhappy_path12705-18 19:53
projectkit:driftline-designrejects_invalid_kind005-18 19:53
projectkit:driftline-designhappy_path13405-18 19:53
projectkit:atelier-meridianrejects_invalid_kind005-18 19:53
projectkit:atelier-meridianhappy_path30405-18 19:53