Paperless Parts Quote Items API

Endpoints for creating and managing line items on a quote.

Business capability
Quote & Configuration Management BC-410.40

Operations 1

POST /quotes/public/items Create a new quote item #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/paperless-parts-quote-items-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

paperless-parts-quote-items-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Paperless Parts Quote Items API
  description: The Paperless Parts API provides access to your data, enabling developers to easily integrate Paperless Parts with third-party systems, such as Customer Relationship Management (CRM) and Enterprise Resource Planning (ERP) tools.
  version: '1.0'
  termsOfService: https://www.paperlessparts.com/web-service-agreement/
  contact:
    name: Paperless Parts
    url: https://www.paperlessparts.com
    email: support@paperlessparts.com
servers:
- url: '{url}/{version}'
  variables:
    url:
      default: https://api.paperlessparts.com
    version:
      default: v1
security:
- app_id: []
tags:
- name: Quote Items
  description: Endpoints for creating and managing line items on a quote.
paths:
  /quotes/public/items:
    post:
      summary: Create a new quote item
      description: 'Creates a new quote item on an existing quote by attaching a part from the part library.


        By default, the part is imported with the process, material, and quantities you specify, and pricing is calculated fresh using your current pricing rules.


        When `use_latest_pricing` is `true`, the part is imported with the process, material, and quantities from the most recent quote on which this part appeared, including all subcomponents and subassemblies; no live pricing refresh is performed. Part must be root part to add to a quote.'
      operationId: CreateQuoteItem
      tags:
      - Quote Items
      responses:
        201:
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteItem'
        400:
          description: Bad request — validation error. Returned when required fields are missing, field values are invalid, or mutually exclusive fields are combined with `use_latest_pricing`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: quantities cannot be provided when use_latest_pricing is true
        404:
          description: Not found. Returned when the `quote` or `part` UUID does not exist or does not belong to your account.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Matching part not found
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - quote
              - part
              properties:
                quote:
                  type: string
                  description: The UUID of the quote to add the line item to.
                  example: 8f14e45f-ceea-467a-a866-ad5ef0911473
                part:
                  type: string
                  description: The UUID of the part to import from the part library. Required in all cases, including when `use_latest_pricing` is `true`.
                  example: 1679091c-5a88-46af-9fbe-81e0e6b21533
                use_latest_pricing:
                  type: boolean
                  description: When `false` (the default), the part is imported with fresh pricing using the process, material, and quantities you supply. When `true`, costing and pricing are copied from the most recent quote on which this part appeared, including all subcomponents and subassemblies. See endpoint description for details on mutual exclusions and fallback behaviour.
                  example: false
                quantities:
                  type: array
                  description: The quantities to price the part at. Required when `use_latest_pricing` is `false` or omitted. Must not be provided when `use_latest_pricing` is `true`.
                  items:
                    type: integer
                  example:
                  - 1
                  - 5
                  - 10
                process:
                  type:
                  - string
                  - 'null'
                  description: The UUID of the process to apply to the part. Optional. Must not be provided when `use_latest_pricing` is `true`.
                  example: 45c48cce-2e2d-4e5a-8ee2-9c1e6b1b5b1e
                material:
                  type:
                  - string
                  - 'null'
                  description: The UUID of the supplier material to apply to the part. Optional. Must not be provided when `use_latest_pricing` is `true`.
                  example: d3d94468-fc4a-4670-b5c7-56c3d26a9a79
                public_notes:
                  type:
                  - string
                  - 'null'
                  description: Notes visible to the customer. Optional. Must not be provided when `use_latest_pricing` is `true`.
                private_notes:
                  type:
                  - string
                  - 'null'
                  description: Internal notes not visible to the customer. Optional. Must not be provided when `use_latest_pricing` is `true`.
                estimated_annual_usage:
                  type:
                  - integer
                  - 'null'
                  description: Estimated annual usage quantity. Optional; only valid when the estimated annual usage feature is enabled for your account. Must not be provided when `use_latest_pricing` is `true`.
                  example: 500
                metadata:
                  type: object
                  description: Arbitrary key-value metadata to attach to the quote item. Optional. Must not be provided when `use_latest_pricing` is `true`.
                  example: '{"crm_id": "1234"}'
                unit_price_precision:
                  type: integer
                  description: The number of decimal places used when displaying unit prices (2–4). Optional; if the selected process defines a precision, that value takes precedence. Must not be provided when `use_latest_pricing` is `true`.
                  example: 2
components:
  schemas:
    QuotePurchasedComponent:
      allOf:
      - $ref: '#/components/schemas/AbstractPurchasedComponent'
      - type: object
        properties:
          id:
            type: string
          properties:
            type: array
            items:
              $ref: '#/components/schemas/PurchasedComponentProperty'
    QuoteExpedite:
      type: object
      description: Expedites represent an additional option for pricing where quote recipients can request a shorter lead time, with an additional markup applied to the unit price.
      properties:
        id:
          type: integer
        lead_time:
          type: integer
          description: Days
        markup:
          type: number
          format: float
          description: Percent
        unit_price:
          type: number
          format: float
        total_price:
          type: number
          format: float
    AbstractPurchasedComponent:
      type: object
      properties:
        oem_part_number:
          type: string
          description: Unique identifier for purchased component within a supplier account
          example: 064-1235
        internal_part_number:
          type:
          - string
          - 'null'
          example: a
        description:
          type:
          - string
          - 'null'
          example: any text you want
        piece_price:
          type: number
          format: decimal
          description: Cost per piece to 4 decimal places
          example: 2.0
    QuoteItem:
      type: object
      description: A quote item represents a line item in a quote. Quote items can either be manual or automatic, as indicated by the 'type' property. Automatic quote items are those generated by adding a part to a quote. Pricing data for automatic quote items is automatically populated using the process, material, and operations, if they exist. Manual quote items do not have an associated part, so the pricing information must be inputted manually.
      properties:
        id:
          type: integer
        type:
          type: string
          enum:
          - automatic
          - manual
          description: Indicates whether the quote item is associated with a part (automatic pricing), or not (manual pricing).
        root_component_id:
          type: integer
          description: ID of the root component. A root component houses the pricing information for a quote item. Every quote item has a root component. In the case of an automatic quote item, the root component corresponds to a part; in the case of a manual quote item, which does not have an associated part, the root component stores the manual pricing data. As the name 'root component' implies, it is possible for a quote item to have many components, as in the case of an assembly of nested parts.
        components:
          type: array
          items:
            $ref: '#/components/schemas/QuoteComponent'
        position:
          type: integer
          description: The position of the quote item in the quote display, indexed from 1.
        export_controlled:
          type: boolean
          description: Whether or not this quote item contains data that is export controlled (ITAR) by the US Government.
        component_ids:
          type: array
          items:
            type: integer
        metadata:
          type:
          - object
          - 'null'
        private_notes:
          type:
          - string
          - 'null'
        public_notes:
          type:
          - string
          - 'null'
        workflow_status:
          type:
          - string
          - 'null'
        root_component:
          deprecated: true
          type:
          - object
          - 'null'
    OrderMaterial:
      type: object
      description: This can also be null
      properties:
        id:
          type: integer
        display_name:
          type: string
        family:
          type: string
        material_class:
          type: string
        name:
          type: string
    PurchasedComponentProperty:
      type: object
      properties:
        name:
          type: string
          description: Name of corresponding purchased component column in table display
        code_name:
          type: string
          description: Name used to access property within pricing formulas via 'dot' operator
        value_type:
          type: string
          enum:
          - string
          - boolean
          - numeric
        value:
          anyOf:
          - type: string
          - type: number
          - type: boolean
          description: Value of property, None or of type corresponding to value_type
    OperationQuantity:
      type: object
      properties:
        price:
          type: number
          format: float
        manual_price:
          type:
          - number
          - 'null'
          format: float
        lead_time:
          type:
          - integer
          - 'null'
        manual_lead_time:
          type:
          - integer
          - 'null'
        quantity:
          type: integer
    QuoteOperation:
      type: object
      properties:
        id:
          type: integer
        category:
          type: string
          enum:
          - material
          - operation
        cost:
          type: number
          format: float
        costing_variables:
          type: array
          items:
            $ref: '#/components/schemas/QuoteCostingVariable'
        quantities:
          type: array
          items:
            $ref: '#/components/schemas/OperationQuantity'
        is_finish:
          type: boolean
        is_outside_service:
          type: boolean
        name:
          type: string
        erp_code:
          type: string
        operation_definition_name:
          type: string
        notes:
          type:
          - string
          - 'null'
        position:
          type: integer
          description: The position of the order operation in the order display, indexed from 1. Note that the position applies across both material operations and order operations. TODO - this shows up as 0 if there is only one operation on the order?
        runtime:
          type:
          - number
          - 'null'
          format: float
        setup_time:
          type:
          - number
          - 'null'
          format: float
    QuoteAddOnQuantity:
      type: object
      properties:
        price:
          type: number
          format: float
        manual_price:
          type: number
          format: float
        quantity:
          type: integer
    QuoteQuantity:
      type: object
      description: A quantity object represents a unit price and a numerical quantity associated with a component. A component can have many quantities, and the set of quantities represents the pricing options available to the recipient of a quote.
      properties:
        id:
          type: integer
        quantity:
          type: integer
        markup_1_price:
          type:
          - number
          - 'null'
          format: float
          description: Users of Paperless Parts can specify up to two distinct markup values on a component.
        markup_1_name:
          type:
          - string
          - 'null'
        markup_2_price:
          type:
          - number
          - 'null'
          format: float
          description: Users of Paperless Parts can specify up to two distinct markup values on a component.
        markup_2_name:
          type:
          - string
          - 'null'
        unit_price:
          type: number
          format: float
        total_price:
          type: number
          format: float
        total_price_with_required_add_ons:
          type: number
          format: float
        lead_time:
          type: integer
          description: Days
        expedites:
          type: array
          items:
            $ref: '#/components/schemas/QuoteExpedite'
        is_most_likely_won_quantity:
          type: boolean
          description: Whether or not this quantity is the most likely quantity to be won.
        most_likely_won_quantity_percent:
          type: integer
        deliver_quantity:
          type: integer
        make_quantity:
          type: integer
        manual_total_unit_price:
          type:
          - number
          - 'null'
          format: float
        total_component_overrides_cost:
          type:
          - number
          - 'null'
          format: float
        total_discount:
          type:
          - number
          - 'null'
          format: float
        total_discount_percentage:
          type:
          - number
          - 'null'
          format: float
        total_inside_processing_cost:
          type:
          - number
          - 'null'
          format: float
        total_outside_processing_cost:
          type:
          - number
          - 'null'
          format: float
        total_price_before_discounts:
          type:
          - number
          - 'null'
          format: float
        total_purchased_component_cost:
          type:
          - number
          - 'null'
          format: float
        total_raw_material_cost:
          type:
          - number
          - 'null'
          format: float
        unit_price_before_discounts:
          type:
          - number
          - 'null'
          format: float
        yield_pct:
          type:
          - number
          - 'null'
          format: float
    QuoteComponent:
      type: object
      description: Represents a component in the quote item. In the simplest case, there is a single root component. If the quote item is an assembly, the array will contain each component in the assembly. Components can be manufactured (i.e., parts), assemblies (i.e., top-level or sub-assembly), or purchased (e.g., hardware). Exactly one component in the array will be the root component, but it might not be the first element in the array.
      properties:
        id:
          type: string
        add_ons:
          type: array
          items:
            $ref: '#/components/schemas/QuoteAddOn'
        discounts:
          type: array
          items:
            type: object
        is_assembly:
          type: boolean
        obtain_method:
          type:
          - string
          - 'null'
        part_custom_attrs:
          type: array
          items:
            type: object
        pricing_items:
          type: array
          items:
            type: object
        quantities:
          type: array
          items:
            $ref: '#/components/schemas/QuoteQuantity'
        child_ids:
          type: array
          items:
            type: integer
        children:
          type: array
          items:
            $ref: '#/components/schemas/ComponentChild'
        description:
          type:
          - string
          - 'null'
        export_controlled:
          type: boolean
          description: Whether or not this component contains data that is export controlled (ITAR) by the US Government.
        finishes:
          type: array
          items:
            type: string
          description: 'Note: this field is deprecated. Finishes now show up as Operations.'
        innate_quantity:
          type: integer
          description: The quantity of this subcomponent that must be produced to make one top-level component.
        is_root_component:
          type: boolean
        material:
          $ref: '#/components/schemas/OrderMaterial'
        material_operations:
          type: array
          items:
            $ref: '#/components/schemas/QuoteOperation'
        parent_ids:
          type: array
          items:
            type: integer
        part_name:
          type: string
        part_number:
          type:
          - string
          - 'null'
        part_url:
          type: string
          format: url
        part_uuid:
          type: string
        process:
          $ref: '#/components/schemas/OrderProcess'
        purchased_component:
          description: Reference to a purchased component object within the supplier account. Will be not null when type == 'purchased'
          $ref: '#/components/schemas/QuotePurchasedComponent'
        revision:
          type:
          - string
          - 'null'
        shop_operations:
          type: array
          items:
            $ref: '#/components/schemas/QuoteOperation'
        supporting_files:
          type: array
          items:
            $ref: '#/components/schemas/OrderSupportingFile'
        thumbnail_url:
          type:
          - string
          - 'null'
        type:
          type: string
          enum:
          - assembled
          - manufactured
          - purchased
    QuoteCostingVariable:
      type: object
      description: A CostingVariable is a piece of a Paperless Parts Programming Language (P3L) formula that determines the price and timing for an operation. CostingVariables are essentially Python variables and can represent several data types.
      properties:
        label:
          type: string
        variable_class:
          type: string
          enum:
          - basic
          - drop_down
          - table
        value_type:
          type: string
          enum:
          - string
          - number
          - currency
          - boolean
          description: Describes the type of the 'value' key in quantities property
        quantity_specific:
          type: boolean
          description: Flag as to whether or not this costing variable can be manipulated for each quantity break
        quantities:
          type: array
          items:
            type: object
            properties:
              stringQuotedQuantity1:
                type: object
                properties:
                  value:
                    anyOf:
                    - type: number
                    - type: string
                    - type: boolean
                  row:
                    type:
                    - object
                    - 'null'
                  options:
                    type:
                    - array
                    - 'null'
                    items:
                      anyOf:
                      - type: number
                      - type: string
              stringQuotedQuantity2:
                type: object
                properties:
                  value:
                    anyOf:
                    - type: number
                    - type: string
                    - type: boolean
                  row:
                    type:
                    - object
                    - 'null'
                  options:
                    type:
                    - array
                    - 'null'
                    items:
                      anyOf:
                      - type: number
                      - type: string
          description: 'The value of the costing variable for each quoted quantity. This is an object with keys corresponding to the top level quote quantities in string form e.g. ''1'', ''5'', ''10''. The values for each of these keys take different shape depending on the variable_class. If variable_class==''basic'', the dictionary values will take the shape {''value'': 1.0}. If variable_class==''drop_down'', the dictionary values will take the shape {''value'': ''a'', ''options'': [''a'', ''b'']}. If variable_class==''table'', the dictionary values will take the shape {''value'': ''a'', ''row'': {''column1'': ''a'', ''column2'': ''b''}}. So for quoted quantities 1, 5, 10 for a basic variable_class, the object will look like: {''1'': {''value'': 1.0}, ''5'': {''value'': 2.0}, ''10'': {''value'': 3.0}}'
        type:
          type: string
          description: To Be Deprecated
          deprecated: false
        value:
          anyOf:
          - type: string
          - type: number
          - type: integer
          - type: boolean
          description: This will be indicated by the value_type field. To Be Deprecated
          deprecated: false
        row:
          type:
          - object
          - 'null'
          description: The row field will only be non-null when the type field is 'table'. Row represents a row in a lookup table and is an object with arbitrary keys. To Be Deprecated
          deprecated: false
    QuoteAddOn:
      type: object
      properties:
        is_required:
          type: boolean
        name:
          type: string
        erp_code:
          type: string
        notes:
          type: string
        quantities:
          type: array
          items:
            $ref: '#/components/schemas/QuoteAddOnQuantity'
        costing_variables:
          type: array
          items:
            $ref: '#/components/schemas/QuoteCostingVariable'
    OrderProcess:
      type: object
      properties:
        id:
          type: integer
        external_name:
          type: string
        name:
          type: string
    OrderSupportingFile:
      type: object
      properties:
        filename:
          type: string
        url:
          type: string
          format: url
    ComponentChild:
      type: object
      properties:
        child_id:
          type: integer
          description: ID of the child component
        quantity:
          type: integer
          description: The number of child component instances belonging to this parent. Note, the total number of instances of this child component in this assembly tree may be larger if this child appears in multiple places in the tree.
  securitySchemes:
    app_id:
      type: apiKey
      description: API key to authorize requests.
      name: Authorization
      in: header