> ## Documentation Index
> Fetch the complete documentation index at: https://docs.msportal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List tickets

> Retrieve a paginated list of tickets. Supports various filters including status, priority, company, and date ranges.



## OpenAPI

````yaml /openapi.json get /api/public/v1/tickets
openapi: 3.0.3
info:
  title: MSPortal Public API
  version: 1.0.0
  description: >-
    Public API for MSPortal - provides programmatic access to tenant data.


    ## Authentication


    All endpoints require authentication via API key passed as a Bearer token:


    ```

    Authorization: Bearer <your-api-key>

    ```


    API keys can be created in the MSPortal dashboard under Settings →
    Integrations → API Access.


    **Important:** Do not include cookies in API requests. The public API uses
    stateless authentication only.


    ## Scopes


    API keys are granted specific scopes that determine what operations they can
    perform. Each endpoint documents its required scope(s).


    ## Rate Limiting


    API calls are rate limited per API key. Rate limit information is returned
    in response headers:


    - `X-RateLimit-Limit`: Maximum requests per minute

    - `X-RateLimit-Remaining`: Remaining requests in current window

    - `X-RateLimit-Reset`: When the rate limit resets (ISO 8601)


    ## Request ID


    All responses include an `X-Request-Id` header for debugging and support.
    You can also pass your own `X-Request-Id` header to correlate requests.
  contact:
    name: MSPortal Support
    email: support@msportal.ai
  license:
    name: Proprietary
servers:
  - url: https://app.msportal.ai
    description: Production environment
security:
  - BearerAuth: []
tags:
  - name: Budgets
    description: >-
      Budget management - create, track, and forecast budgets with line items,
      categories, and products
  - name: Calendar
    description: Calendar and meeting management - events, participants, and meeting types
  - name: Companies
    description: Company management endpoints
  - name: Company Users
    description: Company user management - client portal contacts (read-only, paginated)
  - name: Compliance
    description: Compliance check management - runs, assigned checks, and status updates
  - name: Dashboards
    description: Dashboard management - external iframe resources and internal dashboards
  - name: Devices
    description: Device management - inventory, types, and locations
  - name: Goals
    description: Goal management - create, track, and manage goals with tasks and updates
  - name: NPS Surveys
    description: >-
      NPS survey management - Net Promoter Score surveys, responses, and
      analytics
  - name: Reports
    description: >-
      Report management - create, manage, and schedule reports with templates
      and types
  - name: Planner
    description: >-
      Planner item management - tasks, roadmap items, and project planning with
      linked goals, compliance, and projects
  - name: Surveys
    description: >-
      General survey management - multi-question surveys, responses, and
      statistics
  - name: Tickets
    description: Ticket management - view and filter tickets from PSA integrations
  - name: Training
    description: >-
      Training management - courses, enrollments, certificates, and progress
      tracking
  - name: Users
    description: Tenant user management - internal staff and team members (read-only)
  - name: Automation Rules
    description: >-
      Automation rule management - create, configure, and monitor automation
      rules with triggers, conditions, and actions
  - name: Analytics
    description: >-
      Analytics and reporting - company audit data, training analytics, user
      activity, and portfolio metrics
paths:
  /api/public/v1/tickets:
    get:
      tags:
        - Tickets
      summary: List tickets
      description: >-
        Retrieve a paginated list of tickets. Supports various filters including
        status, priority, company, and date ranges.
      parameters:
        - schema:
            type: number
            minimum: 1
            default: 1
            description: Page number
          required: false
          description: Page number
          name: page
          in: query
        - schema:
            type: number
            minimum: 1
            maximum: 100
            default: 25
            description: Items per page
          required: false
          description: Items per page
          name: limit
          in: query
        - schema:
            type: string
            enum:
              - created_date
              - updated_date
              - title
              - status_name
              - priority_name
              - company_name
              - assigned_to
              - days_open
            default: created_date
            description: Field to sort by
          required: false
          description: Field to sort by
          name: sortColumn
          in: query
        - schema:
            type: boolean
            nullable: true
            default: true
            description: Sort descending
          required: false
          description: Sort descending
          name: sortDesc
          in: query
        - schema:
            type: string
            maxLength: 255
            description: Search in ticket title
          required: false
          description: Search in ticket title
          name: search
          in: query
        - schema:
            type: string
            format: uuid
            description: Filter by company ID
          required: false
          description: Filter by company ID
          name: companyId
          in: query
        - schema:
            type: string
            maxLength: 100
            description: Filter by status name
          required: false
          description: Filter by status name
          name: status
          in: query
        - schema:
            type: string
            maxLength: 100
            description: Filter by priority name
          required: false
          description: Filter by priority name
          name: priority
          in: query
        - schema:
            type: string
            maxLength: 255
            description: Filter by assigned resource
          required: false
          description: Filter by assigned resource
          name: assignedTo
          in: query
        - schema:
            type: boolean
            nullable: true
            description: Filter by closed status
          required: false
          description: Filter by closed status
          name: isClosed
          in: query
        - schema:
            type: string
            enum:
              - connectwise
              - halo
              - syncro
              - autotask
            description: Filter by PSA provider
          required: false
          description: Filter by PSA provider
          name: provider
          in: query
        - schema:
            type: string
            format: date-time
            description: Filter by created date (from)
          required: false
          description: Filter by created date (from)
          name: dateFrom
          in: query
        - schema:
            type: string
            format: date-time
            description: Filter by created date (to)
          required: false
          description: Filter by created date (to)
          name: dateTo
          in: query
      responses:
        '200':
          description: List of tickets
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Rate limit ceiling
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Remaining requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketListResponse'
        '400':
          description: Invalid query parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden - Missing required scope (tickets.read)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    TicketListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Ticket'
          description: Array of tickets
        pagination:
          $ref: '#/components/schemas/Pagination'
      required:
        - data
        - pagination
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message
        requestId:
          type: string
          description: Request correlation ID
        details:
          nullable: true
          description: Additional error details
        code:
          type: string
          description: Error code
      required:
        - error
    Ticket:
      type: object
      properties:
        id:
          type: string
          description: Unique ticket identifier
        ticketNumber:
          type: string
          description: Human-readable ticket number
        title:
          type: string
          description: Ticket title/summary
        description:
          type: string
          nullable: true
          description: Ticket description
        companyId:
          type: string
          nullable: true
          description: Associated company ID
        companyName:
          type: string
          nullable: true
          description: Associated company name
        contactName:
          type: string
          nullable: true
          description: Contact name
        contactEmail:
          type: string
          nullable: true
          description: Contact email
        status:
          type: string
          nullable: true
          description: Current status
        isClosed:
          type: boolean
          description: Whether the ticket is closed
        priority:
          type: string
          nullable: true
          description: Priority level
        assignedTo:
          type: string
          nullable: true
          description: Assigned technician/resource
        boardName:
          type: string
          nullable: true
          description: Service board/queue name
        queueName:
          type: string
          nullable: true
          description: Queue name
        typeName:
          type: string
          nullable: true
          description: Ticket type
        categoryName:
          type: string
          nullable: true
          description: Category name
        issueTypeName:
          type: string
          nullable: true
          description: Issue type
        hoursBudgeted:
          type: number
          nullable: true
          description: Budgeted hours
        hoursActual:
          type: number
          nullable: true
          description: Actual hours worked
        createdAt:
          type: string
          format: date-time
          description: Creation timestamp (ISO 8601)
        updatedAt:
          type: string
          nullable: true
          format: date-time
          description: Last update timestamp (ISO 8601)
        daysOpen:
          type: number
          nullable: true
          description: Number of days the ticket has been open
        provider:
          type: string
          description: PSA provider (connectwise, halo, syncro, autotask)
        externalId:
          type: string
          nullable: true
          description: External ID in the PSA system
        source:
          type: string
          nullable: true
          description: Ticket source
      required:
        - id
        - ticketNumber
        - title
        - description
        - companyId
        - companyName
        - contactName
        - contactEmail
        - status
        - isClosed
        - priority
        - assignedTo
        - boardName
        - queueName
        - typeName
        - categoryName
        - issueTypeName
        - hoursBudgeted
        - hoursActual
        - createdAt
        - updatedAt
        - daysOpen
        - provider
        - externalId
        - source
    Pagination:
      type: object
      properties:
        page:
          type: integer
          minimum: 1
          description: Current page number
        limit:
          type: integer
          minimum: 1
          maximum: 100
          description: Items per page
        totalCount:
          type: integer
          description: Total number of items
        totalPages:
          type: integer
          description: Total number of pages
        hasNextPage:
          type: boolean
          description: Whether there is a next page
        hasPrevPage:
          type: boolean
          description: Whether there is a previous page
      required:
        - page
        - limit
        - totalCount
        - totalPages
        - hasNextPage
        - hasPrevPage
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Use your API key as a Bearer token. API keys can be generated in
        Settings → Integrations → API Access.

````