{
  "swagger": "2.0",
  "info": {
    "title": "TeamsDesk",
    "description": "Power Automate-ready connector for TeamsDesk dev backend tickets, comments, catalog, approvals, users, and audit endpoints.",
    "version": "1.0.0",
    "contact": {
      "name": "TeamsDesk support",
      "url": "https://teamsdesk.queryminds.com/#contact"
    }
  },
  "host": "helpdesk-multitenant-api-dev-hyfbbmbkcqhnggf9.westus2-01.azurewebsites.net",
  "basePath": "/api",
  "schemes": ["https"],
  "consumes": ["application/json"],
  "produces": ["application/json"],
  "securityDefinitions": {
    "api_key": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header",
      "description": "Enter: Bearer tdsk_your_api_key"
    }
  },
  "security": [{ "api_key": [] }],
  "paths": {
    "/v1/tickets": {
      "get": {
        "summary": "List tickets",
        "operationId": "ListTickets",
        "description": "Cursor-paginated ticket list, newest first.",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "limit", "in": "query", "type": "integer", "default": 50, "minimum": 1, "maximum": 200 },
          { "name": "cursor", "in": "query", "type": "integer", "description": "Ticket ID from meta.nextCursor." },
          { "name": "departmentId", "in": "query", "type": "integer" },
          { "name": "status", "in": "query", "type": "string" }
        ],
        "responses": { "200": { "description": "Tickets", "schema": { "$ref": "#/definitions/TicketListEnvelope" } } }
      },
      "post": {
        "summary": "Create ticket",
        "operationId": "CreateTicket",
        "description": "Create a TeamsDesk ticket from a flow.",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CreateTicketRequest" } }
        ],
        "responses": { "201": { "description": "Created ticket", "schema": { "$ref": "#/definitions/TicketEnvelope" } } }
      }
    },
    "/v1/tickets/{ticketId}": {
      "get": {
        "summary": "Get ticket",
        "operationId": "GetTicket",
        "parameters": [
          { "name": "ticketId", "in": "path", "required": true, "type": "integer" }
        ],
        "responses": { "200": { "description": "Ticket", "schema": { "$ref": "#/definitions/TicketEnvelope" } } }
      },
      "patch": {
        "summary": "Update ticket",
        "operationId": "UpdateTicket",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "ticketId", "in": "path", "required": true, "type": "integer" },
          { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/UpdateTicketRequest" } }
        ],
        "responses": { "200": { "description": "Updated ticket", "schema": { "$ref": "#/definitions/TicketEnvelope" } } }
      }
    },
    "/v1/tickets/{ticketId}/close": {
      "post": {
        "summary": "Close ticket",
        "operationId": "CloseTicket",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "ticketId", "in": "path", "required": true, "type": "integer" },
          { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/CloseTicketRequest" } }
        ],
        "responses": { "200": { "description": "Closed ticket", "schema": { "$ref": "#/definitions/TicketEnvelope" } } }
      }
    },
    "/v1/tickets/{ticketId}/comments": {
      "get": {
        "summary": "List comments",
        "operationId": "ListTicketComments",
        "parameters": [
          { "name": "ticketId", "in": "path", "required": true, "type": "integer" },
          { "name": "limit", "in": "query", "type": "integer", "default": 50, "minimum": 1, "maximum": 200 },
          { "name": "cursor", "in": "query", "type": "integer" }
        ],
        "responses": { "200": { "description": "Comments", "schema": { "$ref": "#/definitions/CommentListEnvelope" } } }
      },
      "post": {
        "summary": "Add comment",
        "operationId": "AddTicketComment",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "ticketId", "in": "path", "required": true, "type": "integer" },
          { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/AddCommentRequest" } }
        ],
        "responses": { "201": { "description": "Created comment", "schema": { "$ref": "#/definitions/CommentEnvelope" } } }
      }
    },
    "/v1/departments": {
      "get": {
        "summary": "List departments",
        "operationId": "ListDepartments",
        "responses": { "200": { "description": "Departments", "schema": { "$ref": "#/definitions/DepartmentListEnvelope" } } }
      }
    },
    "/v1/categories": {
      "get": {
        "summary": "List categories",
        "operationId": "ListCategories",
        "parameters": [
          { "name": "departmentId", "in": "query", "type": "integer" }
        ],
        "responses": { "200": { "description": "Categories", "schema": { "$ref": "#/definitions/CategoryListEnvelope" } } }
      }
    },
    "/v1/agents": {
      "get": {
        "summary": "List agents",
        "operationId": "ListAgents",
        "parameters": [
          { "name": "departmentId", "in": "query", "type": "integer" }
        ],
        "responses": { "200": { "description": "Agents", "schema": { "$ref": "#/definitions/AgentListEnvelope" } } }
      }
    },
    "/v1/catalog": {
      "get": {
        "summary": "List service catalog",
        "operationId": "ListServiceCatalog",
        "parameters": [
          { "name": "departmentId", "in": "query", "type": "integer" }
        ],
        "responses": { "200": { "description": "Catalog items", "schema": { "type": "object" } } }
      }
    },
    "/v1/approvals": {
      "get": {
        "summary": "List approvals",
        "operationId": "ListApprovals",
        "parameters": [
          { "name": "ticketId", "in": "query", "type": "integer" },
          { "name": "status", "in": "query", "type": "string" }
        ],
        "responses": { "200": { "description": "Approvals", "schema": { "type": "object" } } }
      }
    },
    "/v1/approvals/{approvalId}/decision": {
      "post": {
        "summary": "Submit approval decision",
        "operationId": "SubmitApprovalDecision",
        "x-ms-visibility": "important",
        "parameters": [
          { "name": "approvalId", "in": "path", "required": true, "type": "integer" },
          { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/ApprovalDecisionRequest" } }
        ],
        "responses": { "200": { "description": "Decision recorded", "schema": { "type": "object" } } }
      }
    },
    "/v1/users": {
      "get": {
        "summary": "List users",
        "operationId": "ListUsers",
        "parameters": [
          { "name": "q", "in": "query", "type": "string" },
          { "name": "limit", "in": "query", "type": "integer", "default": 50, "minimum": 1, "maximum": 200 }
        ],
        "responses": { "200": { "description": "Users", "schema": { "type": "object" } } }
      }
    },
    "/v1/audit": {
      "get": {
        "summary": "List audit events",
        "operationId": "ListAuditEvents",
        "description": "Requires an API key with admin scope.",
        "parameters": [
          { "name": "limit", "in": "query", "type": "integer", "default": 50, "minimum": 1, "maximum": 500 }
        ],
        "responses": { "200": { "description": "Audit events", "schema": { "type": "object" } } }
      }
    }
  },
  "definitions": {
    "Meta": {
      "type": "object",
      "properties": {
        "count": { "type": "integer" },
        "nextCursor": { "type": "integer" },
        "limit": { "type": "integer" },
        "authMethod": { "type": "string" }
      }
    },
    "Ticket": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "title": { "type": "string" },
        "description": { "type": "string" },
        "status": { "type": "string" },
        "severity": { "type": "string" },
        "departmentId": { "type": "integer" },
        "categoryId": { "type": "integer" },
        "createdByUserId": { "type": "integer" },
        "assignedToAgentId": { "type": "integer" },
        "createdAt": { "type": "string", "format": "date-time" },
        "updatedAt": { "type": "string", "format": "date-time" },
        "closedAt": { "type": "string", "format": "date-time" }
      }
    },
    "Comment": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "ticketId": { "type": "integer" },
        "authorUserId": { "type": "integer" },
        "authorDisplayName": { "type": "string" },
        "message": { "type": "string" },
        "isInternalNote": { "type": "boolean" },
        "createdAt": { "type": "string", "format": "date-time" }
      }
    },
    "Department": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" },
        "requiresLocation": { "type": "boolean" }
      }
    },
    "Category": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" },
        "departmentId": { "type": "integer" }
      }
    },
    "Agent": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" },
        "email": { "type": "string" },
        "departmentId": { "type": "integer" }
      }
    },
    "TicketEnvelope": {
      "type": "object",
      "properties": {
        "data": { "$ref": "#/definitions/Ticket" },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "TicketListEnvelope": {
      "type": "object",
      "properties": {
        "data": { "type": "array", "items": { "$ref": "#/definitions/Ticket" } },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "CommentEnvelope": {
      "type": "object",
      "properties": {
        "data": { "$ref": "#/definitions/Comment" },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "CommentListEnvelope": {
      "type": "object",
      "properties": {
        "data": { "type": "array", "items": { "$ref": "#/definitions/Comment" } },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "DepartmentListEnvelope": {
      "type": "object",
      "properties": {
        "data": { "type": "array", "items": { "$ref": "#/definitions/Department" } },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "CategoryListEnvelope": {
      "type": "object",
      "properties": {
        "data": { "type": "array", "items": { "$ref": "#/definitions/Category" } },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "AgentListEnvelope": {
      "type": "object",
      "properties": {
        "data": { "type": "array", "items": { "$ref": "#/definitions/Agent" } },
        "meta": { "$ref": "#/definitions/Meta" }
      }
    },
    "CreateTicketRequest": {
      "type": "object",
      "required": ["title"],
      "properties": {
        "title": { "type": "string" },
        "description": { "type": "string" },
        "departmentId": { "type": "integer" },
        "categoryId": { "type": "integer" },
        "severity": { "type": "string", "enum": ["Low", "Medium", "High", "Critical"] },
        "assignedToAgentId": { "type": "integer" },
        "status": { "type": "string" }
      }
    },
    "UpdateTicketRequest": {
      "type": "object",
      "properties": {
        "title": { "type": "string" },
        "description": { "type": "string" },
        "status": { "type": "string" },
        "severity": { "type": "string", "enum": ["Low", "Medium", "High", "Critical"] },
        "departmentId": { "type": "integer" },
        "categoryId": { "type": "integer" },
        "assignedToAgentId": { "type": "integer" }
      }
    },
    "CloseTicketRequest": {
      "type": "object",
      "required": ["resolution"],
      "properties": {
        "resolution": { "type": "string" },
        "internalResolution": { "type": "string" }
      }
    },
    "AddCommentRequest": {
      "type": "object",
      "required": ["message"],
      "properties": {
        "message": { "type": "string" },
        "isInternalNote": { "type": "boolean", "default": false }
      }
    },
    "ApprovalDecisionRequest": {
      "type": "object",
      "required": ["decision"],
      "properties": {
        "decision": { "type": "string", "enum": ["Approved", "Rejected"] },
        "comment": { "type": "string" }
      }
    }
  }
}
