> ## 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.

# Create ticket template

> Create a reusable parent ticket template with metadata, sections, fields and optional rules. This does not submit a ticket and does not create template branches or visibility assignments. Requires `templates.write` and write_settings_templates.



## OpenAPI

````yaml /openapi.json post /api/public/v1/ticket-templates
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 (US)
  - url: https://eu.msportal.ai
    description: Production (EU)
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
  - name: Client Onboarding
    description: >-
      Client onboarding - portals (phases, tasks, contacts, activation),
      templates, checklist templates, forms and documentation pages
  - name: Backup
    description: >-
      Backup - summaries, protected devices, alerts and SaaS protection (Datto,
      Axcient, Slide, Kaseya)
  - name: Microsoft 365
    description: Microsoft 365 - licenses, users, domains and Secure Score
  - name: Security
    description: >-
      Security - posture summary, EDR incidents, vulnerabilities, email threats,
      firewalls, DNS filtering and security awareness
  - name: Financial
    description: Financial - quotes, invoices and revenue summaries
  - name: Integrations
    description: Integrations - status, sync health, pause and resume (never credentials)
  - name: Documentation
    description: >-
      Documentation - pages, folders and articles synced from Hudu or IT Glue,
      plus built-in pages
  - name: Broadcasts
    description: Broadcasts - emergency broadcasts, recipients and groups
  - name: Notifications
    description: Notifications - the linked user's in-app notifications
  - name: Standards
    description: >-
      Standards - technology standards catalog, service plans, applicability,
      deployment statuses, compliance rollups, white space and costs
  - name: Customer Success
    description: >-
      Customer success - client health scores, trends, benchmarks and Traffic
      Light Reviews
  - name: Tasks
    description: Tasks - the linked user's personal task list
  - name: Tenant Setup
    description: Tenant setup - profile, branding and portal settings (never secrets)
  - name: Roles
    description: Roles - staff and client roles and their permission grants
  - name: Ticket Templates
    description: Ticket templates - reusable ticket definitions
  - name: Readiness
    description: Client readiness - account readiness assessments
  - name: Projects
    description: >-
      Projects - PSA projects with health overlays (deliverables, milestones,
      client actions, weekly updates), phases, tickets, time entries, PSA
      status/owner/priority write-through, ticket notes, task controls, display
      settings and the document library
paths:
  /api/public/v1/ticket-templates:
    post:
      tags:
        - Ticket Templates
      summary: Create ticket template
      description: >-
        Create a reusable parent ticket template with metadata, sections, fields
        and optional rules. This does not submit a ticket and does not create
        template branches or visibility assignments. Requires `templates.write`
        and write_settings_templates.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTicketTemplateRequest'
      responses:
        '201':
          description: Template created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CreateTicketTemplateResult'
                required:
                  - data
        '400':
          description: Validation error (incl. embedded template references)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Forbidden - missing scope (templates.write) or the linked user lacks
            write_settings_templates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: A template with this key already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    CreateTicketTemplateRequest:
      type: object
      properties:
        name:
          type: string
          minLength: 3
          maxLength: 200
        key:
          type: string
          pattern: ^[a-z0-9_-]+$
        description:
          type: string
          nullable: true
          maxLength: 2000
        aiDescription:
          type: string
          nullable: true
          maxLength: 2000
        category:
          type: string
          nullable: true
          maxLength: 200
        categoryId:
          type: string
          nullable: true
          format: uuid
        visibility:
          type: string
          enum:
            - tenant_only
            - company_only
            - company_and_contacts
            - public_link
          default: company_and_contacts
        theme:
          type: string
          enum:
            - system
            - light
            - dark
          default: system
        icon:
          type: string
          nullable: true
          maxLength: 100
        isActive:
          type: boolean
          default: true
        defaultCompanyEnabled:
          type: boolean
          default: true
        defaultPriority:
          type: string
          nullable: true
        defaultBoard:
          type: string
          nullable: true
        defaultStatus:
          type: string
          nullable: true
        defaultTicketTypeId:
          type: string
          nullable: true
        defaultTicketSubtypeId:
          type: string
          nullable: true
        defaultTicketCategoryId:
          type: string
          nullable: true
        defaultAutotaskWorkTypeId:
          type: string
          nullable: true
        defaultAutotaskSourceId:
          type: string
          nullable: true
        haloCategoryId:
          type: string
          nullable: true
        haloImpactId:
          type: string
          nullable: true
        haloUrgencyId:
          type: string
          nullable: true
        useClientPsaDefaults:
          type: boolean
        staticSubject:
          type: string
          nullable: true
          maxLength: 200
        lockSubject:
          type: boolean
        priorityOverride:
          type: object
          nullable: true
          properties:
            enabled:
              type: boolean
            rules:
              type: array
              items:
                type: object
                properties:
                  overridePriorityId:
                    type: string
                    minLength: 1
                  condition:
                    type: object
                    properties:
                      when:
                        type: string
                        minLength: 1
                      op:
                        type: string
                        enum:
                          - equals
                          - not_equals
                          - in
                          - not_in
                          - gt
                          - lt
                          - gte
                          - lte
                          - includes
                          - not_includes
                          - within_hours
                      value:
                        nullable: true
                    required:
                      - when
                      - op
                required:
                  - overridePriorityId
                  - condition
          required:
            - enabled
            - rules
        flowWebhook:
          type: object
          nullable: true
          properties:
            enabled:
              type: boolean
            url:
              type: string
              maxLength: 2048
              default: ''
            secret:
              type: string
              nullable: true
              maxLength: 256
            deliveryMode:
              type: string
              enum:
                - ticket_and_webhook
                - webhook_only
            destination:
              type: string
              enum:
                - url
                - rewst
            integrationId:
              type: string
              nullable: true
              format: uuid
          required:
            - enabled
        sections:
          type: array
          items:
            type: object
            properties:
              title:
                type: string
                minLength: 1
                maxLength: 200
              description:
                type: string
                nullable: true
                maxLength: 1000
              fields:
                type: array
                items:
                  type: object
                  properties:
                    key:
                      type: string
                      pattern: ^[a-z0-9_-]+$
                    label:
                      type: string
                      minLength: 1
                      maxLength: 200
                    type:
                      type: string
                      enum:
                        - short_text
                        - long_text
                        - number
                        - decimal
                        - select
                        - multi_select
                        - checkbox
                        - radio
                        - date
                        - datetime
                        - email
                        - phone
                        - url
                        - priority
                        - impact
                        - urgency
                        - asset
                        - asset_field
                        - cloud_group
                        - user
                        - site
                        - attachment
                        - device
                        - location
                        - project
                        - file_upload
                        - screenshot
                        - psa_classification
                        - embedded_template
                        - label
                    placeholder:
                      type: string
                      nullable: true
                      maxLength: 500
                    helpText:
                      type: string
                      nullable: true
                      maxLength: 1000
                    required:
                      type: string
                      enum:
                        - always
                        - conditional
                        - never
                      default: never
                    defaultValue:
                      nullable: true
                    options:
                      type: array
                      nullable: true
                      items:
                        type: object
                        properties:
                          value:
                            type: string
                            minLength: 1
                          label:
                            type: string
                            minLength: 1
                        required:
                          - value
                          - label
                    validation:
                      type: object
                      nullable: true
                      additionalProperties:
                        nullable: true
                    conditional:
                      type: object
                      nullable: true
                      properties:
                        when:
                          type: string
                          minLength: 1
                        op:
                          type: string
                          enum:
                            - equals
                            - not_equals
                            - in
                            - not_in
                            - gt
                            - lt
                            - gte
                            - lte
                            - includes
                            - not_includes
                            - within_hours
                        value:
                          nullable: true
                        then:
                          type: object
                          properties:
                            required:
                              type: boolean
                            show:
                              type: boolean
                            setDefault:
                              nullable: true
                      required:
                        - when
                        - op
                    embeddedTemplateId:
                      type: string
                      nullable: true
                      format: uuid
                  required:
                    - label
                    - type
                minItems: 1
                maxItems: 100
            required:
              - title
              - fields
          minItems: 1
          maxItems: 50
        rules:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                minLength: 1
                maxLength: 200
              event:
                type: string
                enum:
                  - on_submit
                  - on_change
                  - on_create
              condition:
                nullable: true
              action:
                type: object
                properties:
                  type:
                    type: string
                    enum:
                      - set
                      - add_watcher
                      - webhook
                      - sla
                  payload:
                    nullable: true
                required:
                  - type
            required:
              - name
              - event
              - action
      required:
        - name
        - sections
      description: >-
        A missing key is generated from name; missing field keys are generated
        from their labels and deduplicated. categoryId is a ticket category id.
    CreateTicketTemplateResult:
      type: object
      properties:
        templateId:
          type: string
          format: uuid
        name:
          type: string
        key:
          type: string
        sectionCount:
          type: integer
        fieldCount:
          type: integer
        isActive:
          type: boolean
        noteKey:
          type: string
          description: Translation key of the follow-up note shown in the app
      required:
        - templateId
        - name
        - key
        - sectionCount
        - fieldCount
        - isActive
        - noteKey
    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
  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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.