Phasio Manufacturer Thread Controller API

Endpoints for managing communication threads and projects

OpenAPI Specification

phasio-manufacturer-thread-controller-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Phasio Activity Internal Manufacturer Thread Controller API
  description: This is the API documentation for the Phasio application.
  version: '1.0'
servers:
- url: https://m-api.eu.phas.io
  description: Generated server url
security:
- Phasio API Bearer Token: []
tags:
- name: Manufacturer Thread Controller
  description: Endpoints for managing communication threads and projects
paths:
  /api/manufacturer/v1/thread:
    post:
      tags:
      - Manufacturer Thread Controller
      summary: Create thread
      description: Creates a new communication thread or project
      operationId: create_1
      requestBody:
        content:
          application/json:
            schema:
              description: Thread data to create
              oneOf:
              - $ref: '#/components/schemas/CreateJobDto'
              - $ref: '#/components/schemas/CreateProjectDto'
        required: true
      responses:
        '200':
          description: Thread created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThreadDto'
        '400':
          description: Invalid thread data
        '401':
          description: Unauthorized - operator not found
  /api/manufacturer/v1/thread/merge:
    post:
      tags:
      - Manufacturer Thread Controller
      summary: Merge threads
      description: Merges a source thread into a destination thread
      operationId: merge
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeThreadsDto'
        required: true
      responses:
        '200':
          description: Threads merged successfully
          content:
            application/json:
              schema:
                type: integer
                format: int64
        '400':
          description: Invalid merge data or threads not found
  /api/manufacturer/v1/thread/job-to-project:
    post:
      tags:
      - Manufacturer Thread Controller
      summary: Convert job to project
      description: Converts a manufacturing job thread to a project thread
      operationId: convertJobToProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConvertJobToProjectDto'
        required: true
      responses:
        '200':
          description: Job converted to project successfully
          content:
            application/json:
              schema:
                type: integer
                format: int64
        '400':
          description: Invalid conversion data or job not found
  /api/manufacturer/v1/thread/{threadId}:
    get:
      tags:
      - Manufacturer Thread Controller
      summary: Get thread by ID
      description: Retrieves a specific thread by its ID
      operationId: get_12
      parameters:
      - name: threadId
        in: path
        description: ID of the thread to retrieve
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Thread retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThreadDto'
        '404':
          description: Thread not found
    delete:
      tags:
      - Manufacturer Thread Controller
      summary: Delete thread
      description: Marks a thread as deleted (soft delete)
      operationId: delete_2
      parameters:
      - name: threadId
        in: path
        description: ID of the thread to delete
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '204':
          description: Thread deleted successfully
        '400':
          description: Delete failed or thread not found
    patch:
      tags:
      - Manufacturer Thread Controller
      summary: Update thread
      description: Updates an existing thread
      operationId: update_5
      parameters:
      - name: threadId
        in: path
        description: ID of the thread to update
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          application/json:
            schema:
              description: Updated thread data
              oneOf:
              - $ref: '#/components/schemas/UpdateJobDto'
              - $ref: '#/components/schemas/UpdateProjectDto'
        required: true
      responses:
        '204':
          description: Thread updated successfully
        '400':
          description: Invalid update data or thread not found
  /api/manufacturer/v1/thread/{threadId}/status/{status}:
    patch:
      tags:
      - Manufacturer Thread Controller
      summary: Update project status
      description: Updates the status of a project thread
      operationId: updateProjectStatus
      parameters:
      - name: threadId
        in: path
        description: ID of the thread to update
        required: true
        schema:
          type: integer
          format: int64
      - name: status
        in: path
        description: New status for the project
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Project status updated successfully
        '400':
          description: Invalid status or thread not found
  /api/manufacturer/v1/thread/{threadId}/notifications:
    patch:
      tags:
      - Manufacturer Thread Controller
      summary: Toggle project notifications
      description: Enables or disables notifications for a project
      operationId: toggleProjectNotifications
      parameters:
      - name: threadId
        in: path
        description: ID of the thread to update
        required: true
        schema:
          type: integer
          format: int64
      - name: enable
        in: query
        description: Whether to enable or disable notifications
        required: true
        schema:
          type: boolean
      responses:
        '204':
          description: Project notifications toggled successfully
        '400':
          description: Toggle failed or thread not found
  /api/manufacturer/v1/thread/summary:
    get:
      tags:
      - Manufacturer Thread Controller
      summary: Get operator thread summary
      description: Retrieves a summary of threads for the current operator
      operationId: summariseThreadsForOperator
      parameters:
      - name: pageNumber
        in: query
        description: Page number for pagination
        required: false
        schema:
          type: integer
      - name: pageSize
        in: query
        description: Page size for pagination
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Thread summaries retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ThreadSummaryDto'
        '401':
          description: Unauthorized - operator not found
components:
  schemas:
    FixedPriceShipmentDto:
      allOf:
      - $ref: '#/components/schemas/ShipmentDto'
      - type: object
        properties:
          rate:
            type: number
          toAddressDto:
            $ref: '#/components/schemas/CustomerAddressDto'
          trackingDto:
            $ref: '#/components/schemas/TrackingDto'
          name:
            type: string
      required:
      - shippingMode
    ThreadDto:
      type: object
      discriminator:
        propertyName: type
      properties:
        id:
          type: integer
          format: int64
        operatorId:
          type: integer
          format: int64
        organisationId:
          type: integer
          format: int64
        filesCount:
          type: integer
        type:
          type: string
          enum:
          - JOB
          - PROJECT
        subscribedCustomerIds:
          type: array
          items:
            type: integer
            format: int64
          uniqueItems: true
      required:
      - filesCount
      - id
      - operatorId
      - organisationId
      - subscribedCustomerIds
      - type
    SelfCollectionShipmentDto:
      allOf:
      - $ref: '#/components/schemas/ShipmentDto'
      - type: object
        properties:
          contactName:
            type: string
          contactPhoneNumber:
            type: string
          rate:
            type: number
          name:
            type: string
      required:
      - shippingMode
    CreateOrderCommentDto:
      type: object
      discriminator:
        propertyName: conversationType
      properties:
        message:
          type: string
        customerId:
          type: integer
          format: int64
        actorType:
          type: string
        conversationType:
          type: string
      required:
      - conversationType
      - message
    CreateDiscountDto:
      type: object
      properties:
        discountType:
          type: string
        percentage:
          type: number
      required:
      - discountType
      - percentage
    UpdateThreadDto:
      type: object
      properties:
        type:
          type: string
      required:
      - type
    CreateInstantDiscountDto:
      allOf:
      - $ref: '#/components/schemas/CreateDiscountDto'
      - type: object
        properties:
          note:
            type: string
      required:
      - discountType
      - note
      - percentage
    CreateHourlyExpenseDto:
      allOf:
      - $ref: '#/components/schemas/CreateExpenseDto'
      - type: object
        properties:
          hours:
            type: number
          rate:
            type: number
      required:
      - hours
      - name
      - rate
      - type
    TrackingDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        shipmentId:
          type: integer
          format: int64
        trackingNumber:
          type: string
      required:
      - id
      - shipmentId
      - trackingNumber
    CreateLocationCommentDto:
      allOf:
      - $ref: '#/components/schemas/CreateOrderCommentDto'
      - type: object
        properties:
          locationX:
            type: number
          locationY:
            type: number
          locationZ:
            type: number
          cameraPositionX:
            type: number
          cameraPositionY:
            type: number
          cameraPositionZ:
            type: number
          cameraRotationX:
            type: number
          cameraRotationY:
            type: number
          cameraRotationZ:
            type: number
      required:
      - cameraPositionX
      - cameraPositionY
      - cameraPositionZ
      - cameraRotationX
      - cameraRotationY
      - cameraRotationZ
      - conversationType
      - locationX
      - locationY
      - locationZ
      - message
    CreateAssemblyRequisitionDto:
      type: object
      properties:
        requisitionIntentId:
          type: string
          format: uuid
        assemblyId:
          type: string
          format: uuid
        quantity:
          type: integer
      required:
      - assemblyId
      - quantity
      - requisitionIntentId
    CreateProjectDto:
      allOf:
      - $ref: '#/components/schemas/CreateThreadDto'
      - type: object
        properties:
          name:
            type: string
          description:
            type: string
          status:
            type: string
          estimatedCost:
            type: number
          estimatedIterations:
            type: integer
            format: int64
          notificationsEnabled:
            type: boolean
          subscribedCustomerIds:
            type: array
            items:
              type: integer
              format: int64
      description: Project data to create
      required:
      - customerOrganisationId
      - notificationsEnabled
      - status
      - type
    CreateGenericDiscountDto:
      allOf:
      - $ref: '#/components/schemas/CreateDiscountDto'
      - type: object
        properties:
          code:
            type: string
          startTime:
            type: string
            format: date-time
          endTime:
            type: string
            format: date-time
          genericDiscountNoe:
            type: string
      required:
      - code
      - discountType
      - endTime
      - genericDiscountNoe
      - percentage
      - startTime
    ConvertJobToProjectDto:
      type: object
      description: Job to project conversion data
      properties:
        jobId:
          type: integer
          format: int64
        name:
          type: string
        description:
          type: string
        notificationsEnabled:
          type: boolean
      required:
      - jobId
      - name
      - notificationsEnabled
    CreateOrderDto:
      type: object
      description: Updated order details
      properties:
        requisitions:
          type: array
          items:
            $ref: '#/components/schemas/CreateRequisitionDto'
        assemblyRequisitions:
          type: array
          items:
            $ref: '#/components/schemas/CreateAssemblyRequisitionDto'
        expenses:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/CreateFixedExpenseDto'
            - $ref: '#/components/schemas/CreateHourlyExpenseDto'
        currency:
          type: string
          enum:
          - USD
          - SGD
          - EUR
          - INR
          - JPY
          - AUD
          - GBP
          - NZD
          - MYR
          - CAD
          - CHF
          - DKK
          - SEK
          - MXN
          - ZAR
          - UAH
          - NOK
          - PHP
          - TRY
        source:
          type: string
        discountId:
          type: integer
          format: int64
        operatorNote:
          type: string
        isSilent:
          type: boolean
        affiliate:
          type: string
        paymentDueDate:
          type: string
          format: date-time
        discount:
          oneOf:
          - $ref: '#/components/schemas/CreateCustomerDiscountDto'
          - $ref: '#/components/schemas/CreateGenericDiscountDto'
          - $ref: '#/components/schemas/CreateInstantDiscountDto'
        shipment:
          oneOf:
          - $ref: '#/components/schemas/CarrierAccountShipmentDto'
          - $ref: '#/components/schemas/FixedPriceShipmentDto'
          - $ref: '#/components/schemas/SelfCollectionShipmentDto'
        billingAddressId:
          type: integer
          format: int64
        markPaymentConfirmed:
          type: boolean
        ccCustomerIds:
          type: array
          items:
            type: integer
            format: int64
          uniqueItems: true
        customReference:
          type: string
      required:
      - assemblyRequisitions
      - ccCustomerIds
      - currency
      - expenses
      - markPaymentConfirmed
      - requisitions
      - source
    ShipmentDto:
      type: object
      discriminator:
        propertyName: shippingMode
      properties:
        id:
          type: integer
          format: int64
        shippingMode:
          type: string
          enum:
          - SELF_COLLECTION
          - FIXED_PRICE
          - CARRIER_ACCOUNT
        shippingMethodId:
          type: integer
          format: int64
        rateId:
          type: string
        toAddressId:
          type: integer
          format: int64
        status:
          type: string
        dispatchDate:
          type: string
          format: date
      required:
      - shippingMode
    CreateRequisitionCommentDto:
      allOf:
      - $ref: '#/components/schemas/CreateOrderCommentDto'
      required:
      - conversationType
      - message
    MergeThreadsDto:
      type: object
      description: Thread merge data
      properties:
        sourceThreadId:
          type: integer
          format: int64
        destinationThreadId:
          type: integer
          format: int64
      required:
      - destinationThreadId
      - sourceThreadId
    CreateJobDto:
      allOf:
      - $ref: '#/components/schemas/CreateThreadDto'
      - type: object
        properties:
          createOrderDto:
            $ref: '#/components/schemas/CreateOrderDto'
      required:
      - createOrderDto
      - customerOrganisationId
      - type
    UpdateProjectDto:
      allOf:
      - $ref: '#/components/schemas/UpdateThreadDto'
      - type: object
        properties:
          name:
            type: string
          description:
            type: string
          subscribedCustomerIds:
            type: array
            items:
              type: integer
              format: int64
      description: Updated project data
      required:
      - name
      - subscribedCustomerIds
      - type
    CreateFixedOrientationRequisitionConstraintDto:
      allOf:
      - $ref: '#/components/schemas/CreateRequisitionConstraintDto'
      - type: object
        properties:
          rotationMatrix:
            type: array
            items:
              type: array
              items:
                type: number
            maxItems: 3
            minItems: 3
      required:
      - constraintType
      - rotationMatrix
    CreateRequisitionConstraintDto:
      type: object
      discriminator:
        propertyName: constraintType
      properties:
        constraintType:
          type: string
      required:
      - constraintType
    CreateRequisitionPostProcessingDto:
      type: object
      properties:
        postProcessingId:
          type: integer
          format: int64
        variables:
          type: object
          additionalProperties:
            type: number
      required:
      - postProcessingId
      - variables
    CreateExpenseDto:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        type:
          type: string
      required:
      - name
      - type
    CustomerAddressDto:
      type: object
      properties:
        addressId:
          type: integer
          format: int64
        isBillingAddress:
          type: boolean
        isShippingAddress:
          type: boolean
        street1:
          type: string
        street2:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string
        countryAlpha2Code:
          type: string
        countryAlpha3Code:
          type: string
        jurisdictionIsoCode:
          type: string
        zip:
          type: string
        name:
          type: string
        company:
          type: string
        phone:
          type: string
        email:
          type: string
        residential:
          type: boolean
        taxId:
          type: string
    CreateCustomerDiscountDto:
      allOf:
      - $ref: '#/components/schemas/CreateDiscountDto'
      - type: object
        properties:
          code:
            type: string
          startTime:
            type: string
            format: date-time
          endTime:
            type: string
            format: date-time
          customerId:
            type: integer
            format: int64
      required:
      - code
      - customerId
      - discountType
      - endTime
      - percentage
      - startTime
    CarrierAccountShipmentDto:
      allOf:
      - $ref: '#/components/schemas/ShipmentDto'
      - type: object
        properties:
          toAddressDto:
            $ref: '#/components/schemas/CustomerAddressDto'
          carrierAccountProvider:
            type: string
          carrierAccountServiceType:
            type: string
          carrierAccountServiceName:
            type: string
          estimatedRate:
            type: number
          finalRatePaid:
            type: number
          trackingDto:
            $ref: '#/components/schemas/TrackingDto'
      required:
      - shippingMode
    ThreadSummaryDto:
      type: object
      properties:
        threadId:
          type: integer
          format: int64
        customerName:
          type: string
        customerOrganisationId:
          type: integer
          format: int64
        type:
          type: string
        projectName:
          type: string
        orderId:
          type: integer
          format: int64
        orderNumber:
          type: integer
          format: int64
        quoteNumber:
          type: integer
          format: int64
        lastMessageHint:
          type: string
        lastMessageTime:
          type: string
          format: date-time
      required:
      - customerName
      - customerOrganisationId
      - lastMessageHint
      - lastMessageTime
      - threadId
      - type
    UpdateJobDto:
      allOf:
      - $ref: '#/components/schemas/UpdateThreadDto'
      - type: object
        properties:
          createOrderDto:
            $ref: '#/components/schemas/CreateOrderDto'
      required:
      - createOrderDto
      - type
    CreateThreadDto:
      type: object
      discriminator:
        propertyName: type
      properties:
        type:
          type: string
        customerOrganisationId:
          type: integer
          format: int64
      required:
      - customerOrganisationId
      - type
    CreateFixedExpenseDto:
      allOf:
      - $ref: '#/components/schemas/CreateExpenseDto'
      - type: object
        properties:
          quantity:
            type: number
          unitPrice:
            type: number
          costForOperator:
            type: number
      required:
      - costForOperator
      - name
      - quantity
      - type
      - unitPrice
    CreateRequisitionDto:
      type: object
      properties:
        requisitionIntentId:
          type: string
          format: uuid
        partRevisionId:
          type: string
          format: uuid
        units:
          type: string
          enum:
          - CENTIMETERS
          - MILLIMETERS
          - METRES
          - INCHES
          - FEET
        quantity:
          type: integer
        materialId:
          type: integer
          format: int64
        processPricesId:
          type: string
          format: uuid
        infillId:
          type: integer
          format: int64
        precisionId:
          type: integer
          format: int64
        colorId:
          type: integer
          format: int64
        postProcessing:
          type: array
          items:
            $ref: '#/components/schemas/CreateRequisitionPostProcessingDto'
          uniqueItems: true
        variables:
          type: object
          additionalProperties:
            type: number
        manualPrice:
          type: number
        leadTimeId:
          type: string
          format: uuid
        comments:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/CreateLocationCommentDto'
            - $ref: '#/components/schemas/CreateRequisitionCommentDto'
        name:
          type: string
        constraints:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/CreateFixedOrientationRequisitionConstraintDto'
      required:
      - comments
      - constraints
      - materialId
      - partRevisionId
      - postProcessing
      - processPricesId
      - quantity
      - requisitionIntentId
      - units
      - variables
  securitySchemes:
    Phasio API Bearer Token:
      type: http
      name: Authorization
      in: header
      scheme: bearer
      bearerFormat: JWT