Phasio Customer Order Controller API
Endpoints for managing customer manufacturing orders
Endpoints for managing customer manufacturing orders
openapi: 3.1.0
info:
title: Phasio Activity Internal Customer Order 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: Customer Order Controller
description: Endpoints for managing customer manufacturing orders
paths:
/api/customer/v1/order/{orderId}/purchase-order-pdf:
put:
tags:
- Customer Order Controller
summary: Upload purchase order PDF
description: 'Uploads a PDF document as a purchase order for an order. DEPRECATED: Use the confirmPurchaseOrderPayment endpoint instead, which confirms payment and uploads the PDF in a single call.'
operationId: uploadPurchaseOrderPDF
parameters:
- name: orderId
in: path
description: ID of the order
required: true
schema:
type: integer
format: int64
requestBody:
content:
application/json:
schema:
type: object
properties:
file:
type: string
format: binary
description: Purchase order PDF file
required:
- file
responses:
'204':
description: PDF successfully uploaded
'400':
description: Invalid order ID or upload failed
'401':
description: Unauthorized - missing or invalid authentication
deprecated: true
/api/customer/v1/order:
get:
tags:
- Customer Order Controller
summary: Get all orders
description: Retrieves all orders for the current customer organization
operationId: get_11
responses:
'200':
description: Successfully retrieved orders
content:
application/json:
schema:
type: string
'401':
description: Unauthorized - missing or invalid authentication
post:
tags:
- Customer Order Controller
summary: Create order
description: Creates a new manufacturing order
operationId: create_20
parameters:
- name: threadId
in: query
description: Thread ID the order belongs to
required: true
schema:
type: integer
format: int64
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrderDto'
required: true
responses:
'200':
description: Order successfully created
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOrderResponseDto'
'400':
description: Invalid order data
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/payment:
post:
tags:
- Customer Order Controller
summary: Create payment for order
description: Initiates a payment transaction for the specified order
operationId: createPayment_1
parameters:
- name: orderId
in: path
description: ID of the order to create payment for
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Payment successfully initiated
content:
application/json:
schema:
$ref: '#/components/schemas/CreatedPaymentDto'
'400':
description: Invalid order ID or payment setup failed
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/shipment:
patch:
tags:
- Customer Order Controller
summary: Update order shipment
description: Updates the shipping information for an order
operationId: updateShipment_1
parameters:
- name: orderId
in: path
description: ID of the order
required: true
schema:
type: integer
format: int64
requestBody:
content:
application/json:
schema:
description: Shipment information
oneOf:
- $ref: '#/components/schemas/CarrierAccountShipmentDto'
- $ref: '#/components/schemas/FixedPriceShipmentDto'
- $ref: '#/components/schemas/SelfCollectionShipmentDto'
required: true
responses:
'200':
description: Shipment successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/ShipmentDto'
'400':
description: Invalid order ID or shipment data
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/payment/purchase-order:
patch:
tags:
- Customer Order Controller
summary: Pay by purchase order
description: Confirms payment for an order when paying by purchase order, or updates an existing purchase order. Accepts PO number, message, and optional PDF file.
operationId: confirmPurchaseOrderPayment
parameters:
- name: orderId
in: path
description: ID of the order to confirm payment for
required: true
schema:
type: integer
format: int64
- name: purchaseOrderNumber
in: query
description: Purchase order number
required: false
schema:
type: string
- name: message
in: query
description: Optional message from customer
required: false
schema:
type: string
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: Purchase order PDF file
responses:
'200':
description: Purchase order payment successfully confirmed or updated
content:
application/json:
schema:
$ref: '#/components/schemas/OrderDto'
'400':
description: Invalid order ID or payment confirmation failed
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/payment/invoice:
patch:
tags:
- Customer Order Controller
summary: Confirm invoice payment
description: Confirms payment for an order when paying by invoice (for German manufacturers)
operationId: confirmInvoicePayment
parameters:
- name: orderId
in: path
description: ID of the order to confirm payment for
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Payment successfully confirmed
content:
application/json:
schema:
$ref: '#/components/schemas/OrderDto'
'400':
description: Invalid order ID, invoice payment not enabled, or payment confirmation failed
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/discount/{discountId}/apply:
patch:
tags:
- Customer Order Controller
summary: Apply discount to order
description: Applies a specific discount to an order
operationId: applyDiscount_1
parameters:
- name: orderId
in: path
description: ID of the order
required: true
schema:
type: integer
format: int64
- name: discountId
in: path
description: ID of the discount to apply
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Discount successfully applied
'400':
description: Invalid order ID, discount ID, or discount cannot be applied
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/discount/remove:
patch:
tags:
- Customer Order Controller
summary: Remove discount from order
description: Removes any applied discount from an order
operationId: removeDiscount_1
parameters:
- name: orderId
in: path
description: ID of the order
required: true
schema:
type: integer
format: int64
responses:
'204':
description: Discount successfully removed
'400':
description: Invalid order ID or discount removal failed
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}/awaiting-status:
patch:
tags:
- Customer Order Controller
summary: Update order awaiting status
description: Updates the awaiting status of an order, such as confirming or rejecting a quotation
operationId: updateAwaitingStatus_1
parameters:
- name: orderId
in: path
description: ID of the order to update
required: true
schema:
type: integer
format: int64
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAwaitingStatusDto'
required: true
responses:
'200':
description: Order status successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/OrderDto'
'400':
description: Invalid order ID or status update failed
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/{orderId}:
get:
tags:
- Customer Order Controller
summary: Get order by ID
description: Retrieves a specific order by its unique identifier
operationId: getById_12
parameters:
- name: orderId
in: path
description: ID of the order to retrieve
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Successfully retrieved order
content:
application/json:
schema:
$ref: '#/components/schemas/OrderDto'
'401':
description: Unauthorized - missing or invalid authentication
'404':
description: Order not found
/api/customer/v1/order/{orderId}/quote:
get:
tags:
- Customer Order Controller
summary: Get order quote
description: Retrieves a detailed quote for an existing order
operationId: getOrderQuote
parameters:
- name: orderId
in: path
description: ID of the order to get a quote for
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Order quote successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteDto'
'400':
description: Not found - Order does not exist
'401':
description: Unauthorized - Missing or invalid authentication
/api/customer/v1/order/{orderId}/purchasability:
get:
tags:
- Customer Order Controller
summary: Validate order purchasability
description: Checks if an order can be purchased (all parts manufacturable, etc.)
operationId: validateOrderPurchasability_1
parameters:
- name: orderId
in: path
description: ID of the order to validate
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Purchasability validation completed
content:
application/json:
schema:
$ref: '#/components/schemas/OrderPurchasabilityDto'
'400':
description: Invalid order ID
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/project/{projectId}:
get:
tags:
- Customer Order Controller
summary: Get orders by project
description: Retrieves all orders associated with a specific project or thread
operationId: getByProject
parameters:
- name: projectId
in: path
description: ID of the project/thread
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Successfully retrieved orders
content:
application/json:
schema:
type: string
'401':
description: Unauthorized - missing or invalid authentication
/api/customer/v1/order/count:
get:
tags:
- Customer Order Controller
summary: Get order count
description: Returns the count of orders matching the specified filters
operationId: getCount_2
parameters:
- name: paymentStatus
in: query
description: Filter by payment status
required: false
schema:
type: array
items:
type: string
- name: awaitingStatus
in: query
description: Filter by awaiting status
required: false
schema:
type: string
- name: searchQuery
in: query
description: Search query for order details
required: false
schema:
type: string
- name: orderSource
in: query
description: Filter by order source
required: false
schema:
type: string
- name: showArchived
in: query
description: Include archived orders
required: false
schema:
type: boolean
- name: affiliate
in: query
description: Filter by affiliate
required: false
schema:
type: string
- name: threadId
in: query
description: Filter by thread ID
required: false
schema:
type: integer
format: int64
responses:
'200':
description: Successfully retrieved order count
content:
application/json:
schema:
type: integer
format: int64
'401':
description: Unauthorized - missing or invalid authentication
components:
schemas:
AssemblyRequisitionDto:
type: object
properties:
id:
type: integer
format: int64
assemblyId:
type: string
format: uuid
assemblyName:
type: string
quantity:
type: integer
assemblyPricePaid:
type: number
totalPricePaid:
type: number
partCount:
type: integer
format: int32
createdAt:
type: string
format: date-time
required:
- assemblyId
- assemblyName
- assemblyPricePaid
- id
- partCount
- quantity
- totalPricePaid
FixedOrientationConstraintDto:
allOf:
- $ref: '#/components/schemas/ConstraintDto'
- type: object
properties:
rotationMatrix:
type: array
items:
type: array
items:
type: number
required:
- constraintType
- createdAt
- id
- partSpecificationId
- rotationMatrix
- updatedAt
RequisitionQuoteDto:
type: object
properties:
partRevisionId:
type: string
format: uuid
quantity:
type: integer
price:
type: number
manufacturingPrice:
type: number
postProcessingPrice:
type: number
unitPrice:
type: number
postProcessingOptions:
type: array
items:
$ref: '#/components/schemas/PostProcessingOptionQuoteDto'
required:
- manufacturingPrice
- partRevisionId
- postProcessingOptions
- postProcessingPrice
- price
- quantity
- unitPrice
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
DiscountDto:
type: object
properties:
discountId:
type: integer
format: int64
discountType:
type: string
code:
type: string
percentage:
type: number
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
required:
- discountId
- discountType
- endTime
- percentage
- startTime
SelfCollectionShipmentDto:
allOf:
- $ref: '#/components/schemas/ShipmentDto'
- type: object
properties:
contactName:
type: string
contactPhoneNumber:
type: string
rate:
type: number
name:
type: string
required:
- shippingMode
ExpenseDto:
type: object
properties:
expenseId:
type: integer
format: int64
name:
type: string
description:
type: string
type:
type: string
required:
- expenseId
- name
- type
CreateDiscountDto:
type: object
properties:
discountType:
type: string
percentage:
type: number
required:
- discountType
- percentage
CreateOrderCommentDto:
type: object
discriminator:
propertyName: conversationType
properties:
message:
type: string
customerId:
type: integer
format: int64
actorType:
type: string
conversationType:
type: string
required:
- conversationType
- message
ConstraintDto:
type: object
discriminator:
propertyName: constraintType
properties:
id:
type: string
format: uuid
constraintType:
type: string
partSpecificationId:
type: string
format: uuid
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
required:
- constraintType
- createdAt
- id
- partSpecificationId
- updatedAt
CreateInstantDiscountDto:
allOf:
- $ref: '#/components/schemas/CreateDiscountDto'
- type: object
properties:
note:
type: string
required:
- discountType
- note
- percentage
KanbanColumnDto:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
sequence:
type: integer
format: int32
orderStatus:
type: string
automations:
type: array
items:
$ref: '#/components/schemas/KanbanColumnAutomationDto'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
required:
- automations
- createdAt
- id
- name
- orderStatus
- sequence
- updatedAt
CreateHourlyExpenseDto:
allOf:
- $ref: '#/components/schemas/CreateExpenseDto'
- type: object
properties:
hours:
type: number
rate:
type: number
required:
- hours
- name
- rate
- type
KanbanColumnAutomationDto:
type: object
properties:
id:
type: string
format: uuid
kanbanColumnId:
type: string
format: uuid
type:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
required:
- createdAt
- id
- kanbanColumnId
- type
- updatedAt
TrackingDto:
type: object
properties:
id:
type: integer
format: int64
shipmentId:
type: integer
format: int64
trackingNumber:
type: string
required:
- id
- shipmentId
- trackingNumber
PartManufacturabilityLimitsDto:
type: object
properties:
withinBoundingBoxLimit:
type: boolean
withinWallThicknessLimit:
type: boolean
required:
- withinBoundingBoxLimit
- withinWallThicknessLimit
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
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
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
TaxQuoteComponentDto:
type: object
properties:
shortName:
type: string
longName:
type: string
percentage:
type: number
amount:
type: number
required:
- amount
- longName
- percentage
- shortName
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
RequisitionDto:
type: object
properties:
id:
type: integer
format: int64
orderId:
type: integer
format: int64
partRevisionId:
type: string
format: uuid
units:
type: string
enum:
- CENTIMETERS
- MILLIMETERS
- METRES
- INCHES
- FEET
name:
type: string
quantity:
type: integer
colorId:
type: integer
format: int64
precisionId:
type: integer
format: int64
materialId:
type: integer
format: int64
processPricesId:
type: string
format: uuid
infillId:
type: integer
format: int64
pricePaid:
type: number
postProcessingIds:
type: array
items:
type: integer
format: int64
watertight:
type: boolean
createdAt:
type: string
format: date-time
lastUpdated:
type: string
format: date-time
leadTimeId:
type: string
format: uuid
constraints:
type: array
items:
oneOf:
- $ref: '#/components/schemas/ConstraintDto'
- $ref: '#/components/schemas/FixedOrientationConstraintDto'
required:
- constraints
- createdAt
- id
- lastUpdated
- materialId
- name
- orderId
- partRevisionId
- postProcessingIds
- processPricesId
- quantity
- units
- watertight
OrderPurchasabilityDto:
type: object
properties:
parts:
type: object
additionalProperties:
$ref: '#/components/schemas/PartManufacturabilityDto'
withinBoundingBoxLimit:
type: boolean
withinMaximumOrderValue:
type: boolean
isMaterialPurchasable:
type: boolean
isPostProcessingPurchasable:
type: boolean
isPriceReviewRequired:
type: boolean
canBePurchased:
type: boolean
required:
- canBePurchased
- isMaterialPurchasable
- isPostProcessingPurchasable
- isPriceReviewRequired
- parts
- withinBoundingBoxLimit
- withinMaximumOrderValue
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
PartManufacturabilityWarningsDto:
type: object
properties:
hasOptimalWallThickness:
type: boolean
required:
- hasOptimalWallThickness
CreateRequisitionPostProcessingDto:
type: object
properties:
postProcessingId:
type: integer
format: int64
variables:
type: object
additionalProperties:
type: number
required:
- postProcessingId
- variables
UpdateAwaitingStatusDto:
type: object
description: Status update information
properties:
awaitingStatus:
type: string
enum:
- OPERATOR_CHAT_WITH_US
- CUSTOMER_INVOICE_SENT
- CUSTOMER_ACCEPTED
- CUSTOMER_OFFLINE_PAYMENT
purchaseOrderNumber:
type: string
message:
type: string
required:
- awaitingStatus
CreateExpenseDto:
type: object
properties:
name:
type: string
description:
type: string
type:
type: string
required:
- name
- type
CreateOrderResponseDto:
type: object
properties:
order:
$ref: '#/components/schemas/OrderDto'
requisitions:
type: object
additionalProperties:
$ref: '#/components/schemas/RequisitionDto'
required:
- requisitions
QuoteLineItemDto:
type: object
properties:
name:
type: string
price:
type: number
required:
- name
- price
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
OrderTaxDto:
type: object
properties:
id:
type: string
format: uuid
components:
type: array
items:
$ref: '#/components/schemas/OrderTaxComponentDto'
totalPrice:
type: number
localTotalPrice:
type: number
isTaxAppliedToShipping:
type: boolean
isTaxExempted:
type: boolean
taxNumber:
type: string
required:
- components
- id
- isTaxAppliedToShipping
- isTaxExempted
- localTotalPrice
- totalPric
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/phasio/refs/heads/main/openapi/phasio-customer-order-controller-api-openapi.yml