Pax8 Quotes API
The Quotes API from Pax8 — 3 operation(s) for quotes.
The Quotes API from Pax8 — 3 operation(s) for quotes.
openapi: 3.0.1
info:
title: Authentication Access Token Quotes API
version: 1.0.0
termsOfService: https://usc.pax8.com/resource/display/65345
description: The Access Token that allows access to the Pax8 API
servers:
- url: https://api.pax8.com/v1
security:
- OAuth2: []
tags:
- name: Quotes
paths:
/v2/quotes:
get:
description: Fetches a paginated list of quotes with optional search and status filters.
operationId: getQuotesList
parameters:
- in: query
name: limit
schema:
type: number
default: 10
- in: query
name: page
schema:
type: number
default: 0
- description: Return quotes sorted by fieldName,direction (e.g. sort=status,desc).
in: query
name: sort
schema:
type: string
enum:
- id
- status
- client.name
- createdBy
- createdOn
- updatedOn
- totals.initialTotal
- totals.recurringTotal
- description: Search on fields like client name, reference code, created by user name, and invoice totals.
in: query
name: search
required: false
schema:
type: string
- description: Filter by status. Multiple values can be provided as a comma-separated list.
in: query
name: status
required: false
schema:
type: string
enum:
- draft
- assigned
- sent
- closed
- declined
- accepted
- changes_requested
- expired
- pending
- in: query
name: account
required: false
schema:
type: string
default: user
enum:
- user
- partner
- in: query
name: partnerId
required: false
schema:
type: string
format: uuid
- in: query
name: intentType
required: false
schema:
type: string
enum:
- PARTNER_TO_CLIENT
- PAX8_TO_PARTNER
- PAX8_TO_PARTNER_CLIENT
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListResponse'
description: OK
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error
summary: Get quotes list
tags:
- Quotes
post:
description: Creates a new quote for the specified clientId.
operationId: createQuote
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateQuotePayload'
required: true
responses:
'201':
content:
'*/*':
schema:
$ref: '#/components/schemas/QuoteResponse'
description: Created
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error
summary: Create quote
tags:
- Quotes
/v2/quotes/{quoteId}:
delete:
description: Deletes a quote by its quoteId.
operationId: deleteQuoteById
parameters:
- in: path
name: quoteId
required: true
schema:
type: string
format: uuid
responses:
'204':
content:
'*/*':
schema:
type: string
description: No Content
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error
summary: Delete quote by ID
tags:
- Quotes
get:
description: Returns a single quote record matching the specified quoteId.
operationId: getQuoteById
parameters:
- in: path
name: quoteId
required: true
schema:
type: string
format: uuid
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteResponse'
description: OK - Returns the quote details.
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request - Invalid quote ID.
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error - Access denied.
summary: Get quote by ID
tags:
- Quotes
put:
description: Updates the details of an existing quote.
operationId: updateQuote
parameters:
- in: path
name: quoteId
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateQuotePayload'
required: true
responses:
'200':
content:
'*/*':
schema:
$ref: '#/components/schemas/QuoteResponse'
description: OK
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error
summary: Update quote by ID
tags:
- Quotes
/v2/quotes/{quoteId}/take-ownership:
post:
description: Takes ownership of a quote by the current partner user.
operationId: takeQuoteOwnership
parameters:
- in: path
name: quoteId
required: true
schema:
type: string
format: uuid
responses:
'200':
content:
'*/*':
schema:
$ref: '#/components/schemas/QuoteResponse'
description: OK
'400':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Bad Request
'403':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Authorization Error
'404':
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Not Found
summary: Take quote ownership
tags:
- Quotes
components:
schemas:
ListQuotesViewV2: {}
ListContent:
allOf:
- $ref: '#/components/schemas/ListQuotesViewV2'
- type: object
properties:
client:
$ref: '#/components/schemas/ClientDetails'
createdBy:
type: string
createdOn:
type: string
format: date-time
id:
type: string
format: uuid
intentType:
type: string
enum:
- PARTNER_TO_CLIENT
- PAX8_TO_PARTNER
- PAX8_TO_PARTNER_CLIENT
lineItemCounts:
$ref: '#/components/schemas/ListLineItemCounts'
ownedBy:
$ref: '#/components/schemas/OwnedByDetails'
partner:
$ref: '#/components/schemas/QuoteListPartnerDetails'
published:
type: boolean
publishedOn:
type: string
format: date-time
referenceCode:
type: string
status:
type: string
enum:
- draft
- assigned
- sent
- closed
- declined
- accepted
- changes_requested
- expired
- pending
totals:
$ref: '#/components/schemas/ListTotals'
updatedOn:
type: string
format: date-time
required:
- client
- createdBy
- createdOn
- id
- lineItemCounts
- published
- referenceCode
- status
- totals
- updatedOn
ParentPartnerDetails:
type: object
properties:
parentPartnerId:
type: string
format: uuid
parentPartnerName:
type: string
required:
- parentPartnerId
- parentPartnerName
ListLineItemCounts:
type: object
properties:
custom:
type: integer
format: int64
msp:
type: integer
format: int64
total:
type: integer
format: int64
required:
- custom
- msp
- total
QuoteListPartnerDetails:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
parentPartner:
$ref: '#/components/schemas/ParentPartnerDetails'
required:
- id
- name
ListStatusCounts:
type: object
properties:
accepted:
type: integer
format: int32
closed:
type: integer
format: int32
declined:
type: integer
format: int32
draft:
type: integer
format: int32
expired:
type: integer
format: int32
pending:
type: integer
format: int32
sent:
type: integer
format: int32
required:
- accepted
- closed
- declined
- draft
- expired
- sent
ErrorDetails:
type: object
properties:
message:
type: string
type:
type: string
enum:
- ACCESS_DENIED_IMPERSONATION
- ACCESS_DENIED_REQUESTED_RESOURCE
- ACCESS_LIST_LIMIT_EXCEEDED
- CLIENT_ACCESS_DENIED
- RESOURCE_NOT_FOUND
- BAD_REQUEST
- FAILED_ORDER_VALIDATION
- INVALID_REQUEST_FIELD
- QUOTE_NOT_FOUND
- QUOTE_INVALID_STATUS
- QUOTE_VALIDATION
- QUOTE_EMIT_FAILED
- CREATE_QUOTE_FAILED
- QUOTE_ALREADY_DELETED
- QUOTE_NOT_VALID
- QUOTE_UPSERT_FAILED
- QUOTE_COMPANY_PARTNER_COMPATIBILITY_CHECK_FAILED
- QUOTE_REQUEST_COMPANY_COMPATIBILITY_CHECK_FAILED
- QUOTE_ADD_LINE_ITEMS_FAILED
- USER_NOT_FOUND
- PARTNER_NOT_FOUND
- LINE_ITEM_NOT_FOUND
- QUOTE_LINE_ITEM_NOT_FOUND
- SAVE_LINE_ITEM_FAILED
- REQUEST_VALIDATION_FAILED
- UNAUTHORIZED_ERROR
- LINE_ITEM_LIMIT_EXCEEDED
- DUPLICATE_QUOTE_WITH_EMPTY_LINE_ITEMS
- DUPLICATE_QUOTE_VALIDATE_ALLOWED_PRODUCTS_FAILED
- DUPLICATE_QUOTE_NO_PRODUCTS_ALLOWED
- QUOTE_VALIDATION_TRIAL_PARENT_RESTRICTION
- QUOTE_INVALID_RESPONSE
- COMPANY_NOT_PROVIDED
- COMPANY_PARTNER_COMPATIBILITY_MISMATCH
- USER_LEVEL_CHECK_FAILED
- QUOTE_REQUEST_NOT_FOUND
- QUOTE_ACCESS_EMAIL_EXISTS
- QUOTE_ACCESS_ENTRY_NOT_FOUND
- QUOTE_ACCESS_ENTRY_INVALID_QUOTE_ID
- USER_LEVEL_CHECK_FAILED_COMPANY
- INVALID_REQUEST_PARAMETER
- INVALID_USER_LEVEL
- INVALID_REQUEST_BODY
- BRANDING_NOT_FOUND
- VIEW_NOT_FOUND
- INTERNAL_EXCEPTION
- REFERENCE_CODE_GENERATION_EXCEPTION
- USAGE_BASED_PARAMETERS_MISCONFIGURATION
- UNKNOWN_CURRENCY
- UNKNOWN_ERROR
- UNPROCESSABLE_INPUT
- PAYLOAD_VALIDATION
- MAX_ATTACHMENTS_EXCEEDED
- LIBRARY_MAX_ATTACHMENTS_EXCEEDED
- PREFERENCE_MAX_ATTACHMENTS_EXCEEDED
- DUPLICATE_QUOTE_ATTACHMENT
- QUOTE_ATTACHMENT_NOT_FOUND
- LIBRARY_ATTACHMENT_NOT_FOUND
- PREFERENCE_ATTACHMENT_NOT_FOUND
- LIBRARY_ATTACHMENT_ALREADY_EXISTS
- ATTACHMENT_NOT_FOUND
- QUOTE_ATTACHMENT_UNSUPPORTED_ORDER_INDEX
- LIBRARY_ATTACHMENT_UNSUPPORTED_ORDER_INDEX
- PREFERENCE_ATTACHMENT_UNSUPPORTED_ORDER_INDEX
- DUPLICATE_PREFERENCE_ATTACHMENT
- QUOTE_ALREADY_OWNED
- EXECUTION_VALIDATION
- SHADOW_COMPANY_EXPECTED
- CUSTOMER_COMPANY_EXPECTED
- QUOTE_ACCESS_USERID_EXISTS
required:
- message
- type
UserModel:
type: object
properties:
displayName:
type: string
email:
type: string
fullName:
type: string
id:
type: string
format: uuid
ipAddress:
type: string
quoteAcceptedByName:
type: string
userRole:
type: string
required:
- displayName
- email
- fullName
- id
ClientDetails:
type: object
properties:
id:
type: string
format: uuid
isShadowCompany:
type: boolean
name:
type: string
required:
- id
- isShadowCompany
- name
CreatedBy:
type: object
properties:
fullName:
type: string
id:
type: string
format: uuid
role:
type: string
required:
- fullName
- id
- role
RespondedBy:
type: object
properties:
email:
type: string
fullName:
type: string
ipAddress:
type: string
required:
- email
- fullName
OwnedByDetails:
type: object
properties:
email:
type: string
fullName:
type: string
id:
type: string
format: uuid
role:
type: string
required:
- email
- fullName
- id
- role
LineItemRelationship:
type: object
properties:
requiredLineItemId:
type: string
format: uuid
requiredSubscriptionId:
type: string
format: uuid
PageInfo:
type: object
properties:
number:
type: integer
format: int32
size:
type: integer
format: int32
totalElements:
type: integer
format: int64
totalPages:
type: integer
format: int32
required:
- number
- size
- totalElements
- totalPages
Product:
type: object
properties:
id:
type: string
format: uuid
isMspOnly:
type: boolean
name:
type: string
sku:
type: string
type:
type: string
enum:
- Standalone
- Solution
- Custom
required:
- id
- isMspOnly
- name
- sku
- type
UsageBased:
type: object
properties:
displayNote:
type: boolean
type:
type: string
enum:
- PRICE_FLAT
- PRICE_VARIES
- QTY_VARIES
required:
- displayNote
- type
PartnerDetails:
type: object
properties:
city:
type: string
country:
type: string
id:
type: string
format: uuid
name:
type: string
parentPartner:
$ref: '#/components/schemas/ParentPartnerDetails'
postcode:
type: string
stateOrProvinceCode:
type: string
street:
type: string
street2:
type: string
required:
- city
- id
- name
- postcode
- stateOrProvinceCode
- street
InvoiceTotals:
type: object
properties:
initialCost:
$ref: '#/components/schemas/AmountCurrency'
initialProfit:
$ref: '#/components/schemas/AmountCurrency'
initialTotal:
$ref: '#/components/schemas/AmountCurrency'
recurringCost:
$ref: '#/components/schemas/AmountCurrency'
recurringProfit:
$ref: '#/components/schemas/AmountCurrency'
recurringTotal:
$ref: '#/components/schemas/AmountCurrency'
required:
- initialCost
- initialProfit
- initialTotal
- recurringCost
- recurringProfit
- recurringTotal
UpdateQuotePayload:
type: object
properties:
expiresOn:
type: string
format: date-time
introMessage:
type: string
published:
type: boolean
status:
type: string
enum:
- draft
- assigned
- sent
- closed
- declined
- accepted
- changes_requested
- expired
- pending
termsAndDisclaimers:
type: string
required:
- expiresOn
- introMessage
- published
- status
- termsAndDisclaimers
CreateQuotePayload:
type: object
properties:
clientId:
type: string
format: uuid
quoteRequestId:
type: string
format: uuid
required:
- clientId
ErrorResponse:
type: object
properties:
details:
type: array
items:
$ref: '#/components/schemas/ErrorDetails'
instance:
type: string
message:
type: string
status:
type: integer
format: int32
type:
type: string
required:
- details
- instance
- message
- status
- type
AttachmentResponse:
type: object
properties:
createdBy:
$ref: '#/components/schemas/CreatedBy'
createdOn:
type: string
format: date-time
id:
type: string
format: uuid
name:
type: string
order:
type: integer
format: int32
replacedOn:
type: string
format: date-time
type:
type: string
url:
type: string
required:
- createdBy
- createdOn
- id
- name
- order
- type
- url
LineItemResponse:
type: object
properties:
billingTerm:
type: string
enum:
- Monthly
- Annual
- 1 Year
- 2 Year
- 3 Year
- Trial
- Activation
- One-Time
commitmentTerm:
$ref: '#/components/schemas/CommitmentTerm'
cost:
$ref: '#/components/schemas/AmountCurrency'
effectiveDate:
type: string
format: date-time
id:
type: string
format: uuid
note:
type: string
price:
$ref: '#/components/schemas/AmountCurrency'
product:
$ref: '#/components/schemas/Product'
quantity:
type: integer
format: int64
relationship:
$ref: '#/components/schemas/LineItemRelationship'
subscriptionId:
type: string
format: uuid
totals:
$ref: '#/components/schemas/InvoiceTotals'
usageBased:
$ref: '#/components/schemas/UsageBased'
required:
- billingTerm
- cost
- effectiveDate
- id
- note
- price
- product
- quantity
- totals
CommitmentTerm:
type: object
properties:
id:
type: string
format: uuid
term:
type: string
required:
- id
- term
ListTotals:
type: object
properties:
initialTotal:
$ref: '#/components/schemas/AmountCurrency'
recurringTotal:
$ref: '#/components/schemas/AmountCurrency'
required:
- initialTotal
- recurringTotal
AmountCurrency:
type: object
properties:
amount:
type: number
format: double
currency:
type: string
required:
- amount
- currency
QuoteResponse:
type: object
properties:
acceptedBy:
$ref: '#/components/schemas/RespondedBy'
attachments:
type: array
items:
$ref: '#/components/schemas/AttachmentResponse'
client:
$ref: '#/components/schemas/ClientDetails'
createdBy:
type: string
createdByEmail:
type: string
createdOn:
type: string
format: date-time
declinedBy:
$ref: '#/components/schemas/RespondedBy'
expiresOn:
type: string
format: date-time
id:
type: string
format: uuid
intentType:
type: string
enum:
- PARTNER_TO_CLIENT
- PAX8_TO_PARTNER
- PAX8_TO_PARTNER_CLIENT
introMessage:
type: string
lineItems:
$ref: '#/components/schemas/LineItemResponse'
ownedBy:
$ref: '#/components/schemas/UserModel'
partner:
$ref: '#/components/schemas/PartnerDetails'
published:
type: boolean
publishedOn:
type: string
format: date-time
quoteRequestId:
type: string
format: uuid
referenceCode:
type: string
respondedOn:
type: string
format: date-time
revokedOn:
type: string
format: date-time
salesMarginPercentage:
type: number
format: double
status:
type: string
enum:
- draft
- assigned
- sent
- closed
- declined
- accepted
- changes_requested
- expired
- pending
termsAndDisclaimers:
type: string
totals:
$ref: '#/components/schemas/InvoiceTotals'
required:
- attachments
- client
- createdBy
- createdByEmail
- createdOn
- expiresOn
- id
- introMessage
- lineItems
- partner
- published
- referenceCode
- status
- termsAndDisclaimers
- totals
ListResponse:
type: object
properties:
content:
type: array
items:
$ref: '#/components/schemas/ListContent'
page:
$ref: '#/components/schemas/PageInfo'
statusCounts:
$ref: '#/components/schemas/ListStatusCounts'
required:
- content
- page
- statusCounts
securitySchemes:
OAuth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://token-manager.pax8.com/oauth/token
scopes: {}