Pax8 Quotes API

The Quotes API from Pax8 — 3 operation(s) for quotes.

OpenAPI Specification

pax8-quotes-api-openapi.yml Raw ↑
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: {}