Pylon Tags and Custom Fields API

Create, list, retrieve, update, and delete tags, and create, list, retrieve, and update custom field definitions used to extend issues, accounts, and contacts.

OpenAPI Specification

pylon-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Pylon API
  description: >-
    REST API for Pylon (usepylon.com), the B2B customer support and customer
    operations platform. Programmatically manage issues (tickets), accounts,
    contacts, users, teams, tags, custom fields, the knowledge base, and
    tasks/projects. Authentication uses a Bearer API token; only Admin users
    can create API tokens in Pylon settings.
  termsOfService: https://usepylon.com/terms
  contact:
    name: Pylon Support
    url: https://docs.usepylon.com/pylon-docs/developer/api
  version: '1.0'
servers:
  - url: https://api.usepylon.com
    description: Pylon production API
security:
  - bearerAuth: []
tags:
  - name: Issues
    description: Support issues (tickets).
  - name: Accounts
    description: Customer accounts.
  - name: Contacts
    description: Individual contacts (end customers).
  - name: Users
    description: Internal Pylon users (agents).
  - name: Teams
    description: Support teams.
  - name: Tags
    description: Tags used across issues, accounts, and contacts.
  - name: Custom Fields
    description: Custom field definitions.
  - name: Knowledge Base
    description: Knowledge bases, collections, and articles.
  - name: Tasks
    description: Tasks, projects, and milestones.
paths:
  /me:
    get:
      operationId: getMe
      tags:
        - Users
      summary: Get the authenticated user
      description: Returns the user associated with the current API token.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
  /issues:
    get:
      operationId: listIssues
      tags:
        - Issues
      summary: List issues
      description: >-
        Returns a paginated list of issues within a time range. The window
        between start_time and end_time may not exceed 30 days.
      parameters:
        - name: start_time
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: end_time
          in: query
          required: true
          schema:
            type: string
            format: date-time
        - name: cursor
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueListResponse'
    post:
      operationId: createIssue
      tags:
        - Issues
      summary: Create an issue
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIssueRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueResponse'
  /issues/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getIssue
      tags:
        - Issues
      summary: Get an issue
      description: Fetch a single issue by ID or number.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueResponse'
    patch:
      operationId: updateIssue
      tags:
        - Issues
      summary: Update an issue
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateIssueRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueResponse'
    delete:
      operationId: deleteIssue
      tags:
        - Issues
      summary: Delete an issue
      responses:
        '200':
          description: OK
  /issues/search:
    post:
      operationId: searchIssues
      tags:
        - Issues
      summary: Search issues
      description: Search issues using structured filters and fuzzy text.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueListResponse'
  /issues/{id}/snooze:
    post:
      operationId: snoozeIssue
      tags:
        - Issues
      summary: Snooze an issue
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                snooze_until_time:
                  type: string
                  format: date-time
              required:
                - snooze_until_time
      responses:
        '200':
          description: OK
  /issues/{id}/followers:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listIssueFollowers
      tags:
        - Issues
      summary: List issue followers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
    post:
      operationId: updateIssueFollowers
      tags:
        - Issues
      summary: Add or remove issue followers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                add_follower_ids:
                  type: array
                  items:
                    type: string
                remove_follower_ids:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: OK
  /issues/{id}/external-issues:
    post:
      operationId: linkExternalIssues
      tags:
        - Issues
      summary: Link or unlink external issues
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                link:
                  type: array
                  items:
                    $ref: '#/components/schemas/ExternalIssue'
                unlink:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: OK
  /accounts:
    get:
      operationId: listAccounts
      tags:
        - Accounts
      summary: List accounts
      parameters:
        - name: cursor
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountListResponse'
    post:
      operationId: createAccount
      tags:
        - Accounts
      summary: Create an account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAccountRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
    patch:
      operationId: updateAccounts
      tags:
        - Accounts
      summary: Update multiple accounts
      description: Updates 1-100 accounts in a single request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                account_ids:
                  type: array
                  items:
                    type: string
                account_type:
                  type: string
                owner_id:
                  type: string
                tags:
                  type: array
                  items:
                    type: string
                tags_apply_mode:
                  type: string
                custom_fields:
                  type: object
                  additionalProperties: true
              required:
                - account_ids
      responses:
        '200':
          description: OK
  /accounts/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getAccount
      tags:
        - Accounts
      summary: Get an account
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
    patch:
      operationId: updateAccount
      tags:
        - Accounts
      summary: Update an account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAccountRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
    delete:
      operationId: deleteAccount
      tags:
        - Accounts
      summary: Delete an account
      responses:
        '200':
          description: OK
  /accounts/search:
    post:
      operationId: searchAccounts
      tags:
        - Accounts
      summary: Search accounts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountListResponse'
  /accounts/merge:
    post:
      operationId: mergeAccounts
      tags:
        - Accounts
      summary: Merge accounts
      description: Merges 1-100 accounts into a surviving account.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                merge_into_account_id:
                  type: string
                merge_account_ids:
                  type: array
                  items:
                    type: string
              required:
                - merge_into_account_id
                - merge_account_ids
      responses:
        '200':
          description: OK
  /contacts:
    get:
      operationId: listContacts
      tags:
        - Contacts
      summary: List contacts
      parameters:
        - name: cursor
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactListResponse'
    post:
      operationId: createContact
      tags:
        - Contacts
      summary: Create a contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
  /contacts/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getContact
      tags:
        - Contacts
      summary: Get a contact
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
    patch:
      operationId: updateContact
      tags:
        - Contacts
      summary: Update a contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
    delete:
      operationId: deleteContact
      tags:
        - Contacts
      summary: Delete a contact
      responses:
        '200':
          description: OK
  /contacts/search:
    post:
      operationId: searchContacts
      tags:
        - Contacts
      summary: Search contacts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactListResponse'
  /users:
    get:
      operationId: listUsers
      tags:
        - Users
      summary: List users
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
  /users/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getUser
      tags:
        - Users
      summary: Get a user
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
    patch:
      operationId: updateUser
      tags:
        - Users
      summary: Update a user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                role_id:
                  type: string
                status:
                  type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
  /users/search:
    post:
      operationId: searchUsers
      tags:
        - Users
      summary: Search users
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
  /teams:
    get:
      operationId: listTeams
      tags:
        - Teams
      summary: List teams
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Team'
    post:
      operationId: createTeam
      tags:
        - Teams
      summary: Create a team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTeamRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamResponse'
  /teams/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getTeam
      tags:
        - Teams
      summary: Get a team
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamResponse'
    patch:
      operationId: updateTeam
      tags:
        - Teams
      summary: Update a team
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTeamRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamResponse'
  /tags:
    get:
      operationId: listTags
      tags:
        - Tags
      summary: List tags
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Tag'
    post:
      operationId: createTag
      tags:
        - Tags
      summary: Create a tag
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTagRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
  /tags/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getTag
      tags:
        - Tags
      summary: Get a tag
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
    patch:
      operationId: updateTag
      tags:
        - Tags
      summary: Update a tag
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTagRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResponse'
    delete:
      operationId: deleteTag
      tags:
        - Tags
      summary: Delete a tag
      responses:
        '200':
          description: OK
  /custom-fields:
    get:
      operationId: listCustomFields
      tags:
        - Custom Fields
      summary: List custom fields
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CustomField'
    post:
      operationId: createCustomField
      tags:
        - Custom Fields
      summary: Create a custom field
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomField'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
  /custom-fields/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getCustomField
      tags:
        - Custom Fields
      summary: Get a custom field
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
    patch:
      operationId: updateCustomField
      tags:
        - Custom Fields
      summary: Update a custom field
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomField'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldResponse'
  /knowledge-bases:
    get:
      operationId: listKnowledgeBases
      tags:
        - Knowledge Base
      summary: List knowledge bases
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/KnowledgeBase'
  /knowledge-bases/{id}/collections:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listCollections
      tags:
        - Knowledge Base
      summary: List collections
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Collection'
    post:
      operationId: createCollection
      tags:
        - Knowledge Base
      summary: Create a collection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Collection'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Collection'
  /knowledge-bases/{id}/collections/{collection_id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: collection_id
        in: path
        required: true
        schema:
          type: string
    patch:
      operationId: updateCollection
      tags:
        - Knowledge Base
      summary: Update a collection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Collection'
      responses:
        '200':
          description: OK
    delete:
      operationId: deleteCollection
      tags:
        - Knowledge Base
      summary: Delete a collection
      responses:
        '200':
          description: OK
  /knowledge-bases/{id}/articles:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listArticles
      tags:
        - Knowledge Base
      summary: List articles
      parameters:
        - name: cursor
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Article'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
    post:
      operationId: createArticle
      tags:
        - Knowledge Base
      summary: Create an article
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Article'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Article'
  /knowledge-bases/{id}/articles/{article_id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: article_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getArticle
      tags:
        - Knowledge Base
      summary: Get an article
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Article'
    patch:
      operationId: updateArticle
      tags:
        - Knowledge Base
      summary: Update an article
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Article'
      responses:
        '200':
          description: OK
    delete:
      operationId: deleteArticle
      tags:
        - Knowledge Base
      summary: Delete an article
      responses:
        '200':
          description: OK
  /knowledge-bases/{id}/route-redirects:
    post:
      operationId: createRouteRedirect
      tags:
        - Knowledge Base
      summary: Create a route redirect
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                from_path:
                  type: string
                to_path:
                  type: string
      responses:
        '200':
          description: OK
  /tasks:
    get:
      operationId: listTasks
      tags:
        - Tasks
      summary: List tasks
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Task'
    post:
      operationId: createTask
      tags:
        - Tasks
      summary: Create a task
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Task'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
  /tasks/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getTask
      tags:
        - Tasks
      summary: Get a task
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
    patch:
      operationId: updateTask
      tags:
        - Tasks
      summary: Update a task
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Task'
      responses:
        '200':
          description: OK
    delete:
      operationId: deleteTask
      tags:
        - Tasks
      summary: Delete a task
      responses:
        '200':
          description: OK
  /tasks/search:
    post:
      operationId: searchTasks
      tags:
        - Tasks
      summary: Search tasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
  /projects:
    post:
      operationId: createProject
      tags:
        - Tasks
      summary: Create a project
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
  /projects/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getProject
      tags:
        - Tasks
      summary: Get a project
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
    patch:
      operationId: updateProject
      tags:
        - Tasks
      summary: Update a project
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
      responses:
        '200':
          description: OK
    delete:
      operationId: deleteProject
      tags:
        - Tasks
      summary: Delete a project
      responses:
        '200':
          description: OK
  /projects/search:
    post:
      operationId: searchProjects
      tags:
        - Tasks
      summary: Search projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: OK
  /milestones:
    post:
      operationId: createMilestone
      tags:
        - Tasks
      summary: Create a milestone
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Milestone'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Milestone'
  /milestones/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getMilestone
      tags:
        - Tasks
      summary: Get a milestone
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Milestone'
    patch:
      operationId: updateMilestone
      tags:
        - Tasks
      summary: Update a milestone
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Milestone'
      responses:
        '200':
          description: OK
    delete:
      operationId: deleteMilestone
      tags:
        - Tasks
      summary: Delete a milestone
      responses:
        '200':
          description: OK
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Pylon API token passed as a Bearer token in the Authorization header.
        Only Admin users can create API tokens in Pylon settings.
  schemas:
    Pagination:
      type: object
      properties:
        cursor:
          type: string
        has_next_page:
          type: boolean
    SearchRequest:
      type: object
      properties:
        filter:
          type: object
          additionalProperties: true
          description: Structured filter expression with field, operator, and values.
        cursor:
          type: string
        limit:
          type: integer
    NamedRef:
      type: object
      properties:
        id:
   

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pylon/refs/heads/main/openapi/pylon-openapi.yml