Paperless Parts Quotes API
Endpoints for identifying newly sent quotes, pulling all information related to a particular quote, and updating a quote's status.
Endpoints for identifying newly sent quotes, pulling all information related to a particular quote, and updating a quote's status.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/paperless-parts-quotes-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Paperless Parts Quotes API
contact:
name: Paperless Parts
url: https://www.paperlessparts.com
email: support@paperlessparts.com
termsOfService: https://www.paperlessparts.com/web-service-agreement/
version: '1.0'
description: 'Operations tagged Quotes across 2 of this provider''s published API definitions: paperless-parts-v1-openapi.yml, paperless-parts-v2-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v1
security:
- app_id: []
tags:
- name: Quotes
description: Endpoints for identifying newly sent quotes, pulling all information related to a particular quote, and updating a quote's status.
paths:
/quotes/public/new:
get:
summary: List new quote numbers and revisions
description: List the numbers and revisions of new quotes that have been sent. If the number and (optional) revision of the last known sent quote is supplied, this endpoint will return a list of the numbers and revisions of the quotes sent after the specified quote. If no number is provided, this endpoint will return a list of the numbers and revisions of all sent quotes. Note that the quote numbers will be returned in the order the quotes were sent, not necessarily in ascending numerical order.
operationId: NewQuoteNumbers
parameters:
- $ref: '#/components/parameters/last_quote'
- $ref: '#/components/parameters/revision'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteNumberArray'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v1
/quotes/public/{quoteNumber}:
get:
summary: Get quote details
description: Get the details for a specific quote.
operationId: QuoteDetails
parameters:
- $ref: '#/components/parameters/quoteNumber'
- $ref: '#/components/parameters/revisionNumber'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
patch:
summary: Update fields on a Quote
description: Update fields on a Quote.
operationId: UpdateQuote
parameters:
- $ref: '#/components/parameters/quoteNumber'
- $ref: '#/components/parameters/revisionNumber'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
erp_code:
type:
- string
- 'null'
description: The unique identifier of the corresponding quote record in the ERP system, cast to a string.
example: '1234'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v1
/quotes/public/{quoteNumber}/status_change:
patch:
summary: Update a quote's status
description: Update a specific quote's status.
operationId: SetQuoteStatus
parameters:
- $ref: '#/components/parameters/quoteNumber'
- $ref: '#/components/parameters/revisionNumber'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type:
- string
- 'null'
description: the status of the quote. Available statuses are "oustanding", "cancelled", "lost", and "trash"
example: outstanding
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v1
/quotes/public/{quoteNumber}/files:
get:
summary: Get a quote's supporting files
description: Get a list of supporting files on a quote.
operationId: GetQuoteFiles
parameters:
- $ref: '#/components/parameters/quoteNumber'
- $ref: '#/components/parameters/revisionNumber'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
type: object
properties:
count:
type: integer
next:
type:
- string
- 'null'
format: url
previous:
type:
- string
- 'null'
format: url
results:
type: array
items:
$ref: '#/components/schemas/QuoteFile'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v1
/quotes/public:
post:
summary: Create a new quote
description: Creates a new quote object
operationId: CreateQuote
tags:
- Quotes
responses:
201:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteHeader'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
contact_id:
type:
- integer
- 'null'
description: The ID of the associated Contact
metadata:
$ref: '#/components/schemas/Metadata'
manual_rfq_received_date:
type: string
format: date-time
rfq_number:
type:
- string
- 'null'
expired_date:
type: string
format: date-time
estimator:
type:
- string
- 'null'
example: 335c5770-8cd4-46d3-98a1-7c0e12251124
description: The uuid for the estimator assigned to this quote
salesperson:
type:
- string
- 'null'
example: 335c5770-8cd4-46d3-98a1-7c0e12251124
description: The uuid for the salesperson assigned to this quote
due_date:
type:
- string
- 'null'
format: date-time
description: The due date of the quote
private_notes:
type:
- string
- 'null'
description: Internal notes regarding the quote
quote_notes:
type:
- string
- 'null'
description: Customer-facing notes regarding the quote
erp_code:
type:
- string
- 'null'
tax_rate:
type: number
format: float
priority:
type: integer
get:
summary: List quote headers
operationId: ListQuoteHeaders
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
type: object
properties:
count:
type: integer
description: The total number of records matching the supplied query parameters
next:
type:
- string
- 'null'
description: The URL of the next page of results. Null if this is the last page
previous:
type:
- string
- 'null'
description: The URL of the previous page of results. Null if this is the first page
results:
$ref: '#/components/schemas/QuoteHeader'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/header/{quoteUuid}:
get:
summary: Get the details for a quote header
operationId: GetQuoteHeaderDetails
tags:
- Quotes
parameters:
- $ref: '#/components/parameters/quoteUuid'
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteHeader'
404:
description: Not found response
content:
text/plain:
schema:
title: Order not found
type: string
example: 'Error: Not Found'
patch:
summary: Update the details for a quote header
operationId: UpdateQuoteHeaderDetails
tags:
- Quotes
parameters:
- $ref: '#/components/parameters/quoteUuid'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
erp_code:
type:
- string
- 'null'
metadata:
$ref: '#/components/schemas/Metadata'
manual_rfq_received_date:
type: string
format: date-time
rfq_number:
type:
- string
- 'null'
expired_date:
type: string
format: date-time
status:
type:
- string
- 'null'
description: the status of the quote. Available statuses are "oustanding", "cancelled", "lost", and "trash"
example: outstanding
estimator:
type:
- string
- 'null'
example: 335c5770-8cd4-46d3-98a1-7c0e12251124
description: The uuid for the estimator assigned to this quote
salesperson:
type:
- string
- 'null'
example: 335c5770-8cd4-46d3-98a1-7c0e12251124
description: The uuid for the salesperson assigned to this quote
due_date:
type:
- string
- 'null'
format: date-time
description: The due date of the quote
private_notes:
type:
- string
- 'null'
description: Internal notes regarding the quote
quote_notes:
type:
- string
- 'null'
description: Customer-facing notes regarding the quote
tax_rate:
type: number
format: float
priority:
type: integer
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteHeader'
404:
description: Not found response
content:
text/plain:
schema:
title: Order not found
type: string
example: 'Error: Not Found'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/items:
post:
summary: Create a new quote item
description: Attach a new QuoteItem to a Quote
operationId: CreateQuoteItem
tags:
- Quotes
responses:
201:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLine'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
quote:
type: string
description: The UUID of the quote to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
material:
type: string
description: The UUID of the material to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
part:
type: string
description: The UUID of the part to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
process:
type: string
description: The UUID of the process to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
quantities:
type: array
description: Array of the requested quantities
items:
type: integer
example:
- 1
- 5
- 10
public_notes:
type: string
private_notes:
type: string
metadata:
$ref: '#/components/schemas/Metadata'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/items/{quoteItemUuid}:
patch:
summary: Update fields on a QuoteItem.
description: Update field on a QuoteItem.
operationId: updateQuoteItem
parameters:
- $ref: '#/components/parameters/quoteItemUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLine'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
material:
type: string
description: The UUID of the material to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
process:
type: string
description: The UUID of the process to tie the quote item to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
public_notes:
type: string
private_notes:
type: string
metadata:
$ref: '#/components/schemas/Metadata'
workflow_status:
type: string
enum:
- not_started
- in_progress
- on_hold
- completed
- no_quote
example: in_progress
get:
summary: Get details for a QuoteItem.
description: Get details for a QuoteItem.
operationId: getQuoteItem
parameters:
- $ref: '#/components/parameters/quoteItemUuid'
- in: query
name: expand
schema:
type: string
required: false
description: 'Expand a fields that provides UUID(s) to provide the full object(s) instead. Valid choices are: ''add_ons'', ''discounts'', material'', ''operations'', ''part'', ''pricing_items'', ''process'', ''quantities'''
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLine'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
delete:
summary: Delete a QuoteItem.
operationId: deleteQuoteItem
parameters:
- $ref: '#/components/parameters/quoteItemUuid'
tags:
- Quotes
responses:
204:
description: Successful response
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/items/{quoteItemUuid}/bulk_update_operations:
patch:
summary: Bulk update a QuoteItem's operations.
description: Bulk updates specific operations on a QuoteItem.
operationId: bulkUpdateOperations
parameters:
- $ref: '#/components/parameters/quoteItemUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
type: array
example: []
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/QuoteLineOperation'
type: object
properties:
uuid:
type: string
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
description: The UUID of the operation you want to apply these updates to
name:
type:
- string
- 'null'
example: Name
description: The name of the operation
notes:
type:
- string
- 'null'
example: notes
description: The operation's notes
is_finish:
type:
- boolean
- 'null'
example: false
description: Whether the operation is a finish
is_outside_service:
type:
- boolean
- 'null'
example: true
description: Whether the operation is an outside service
costing_variable_overrides:
$ref: '#/components/schemas/CostingVariableOverrides'
position:
type:
- integer
- 'null'
example: 0
description: The position of the operation
runtime_display_units:
type:
- string
- 'null'
example: hr
description: The runtime display units for the operation
setup_time_display_units:
type:
- string
- 'null'
example: min
description: The setup time display units for the operation
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/operations:
post:
summary: Create a new operation for a quote item
description: Attach a new Operation to a QuoteItem
operationId: CreateOperation
tags:
- Quotes
responses:
201:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineOperation'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
quote_item:
type: string
description: The UUID of the quote item to tie the operation to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
operation_definition:
type: string
description: The UUID of the operation definition to generate the operation from.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
is_finish:
type: boolean
default: false
is_outside_service:
type: boolean
default: false
name:
type: string
notes:
type: string
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/operations/{operationUuid}:
get:
summary: Get details for an Operation.
description: Get details for an Operation.
operationId: getOperation
parameters:
- $ref: '#/components/parameters/operationUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineOperation'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
patch:
summary: Update fields on an Operation.
description: Update field on an Operation.
operationId: updateOperation
parameters:
- $ref: '#/components/parameters/operationUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineOperation'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
is_finish:
type: boolean
default: false
is_outside_service:
type: boolean
default: false
name:
type: string
notes:
type: string
costing_variable_overrides:
$ref: '#/components/schemas/CostingVariableOverrides'
delete:
summary: Delete an Operation.
operationId: deleteOperation
parameters:
- $ref: '#/components/parameters/operationUuid'
tags:
- Quotes
responses:
204:
description: Successful response
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/add_ons/{addOnUuid}:
get:
summary: Get details for an Add-On.
description: Get details for an Add-On.
operationId: getAddOn
parameters:
- $ref: '#/components/parameters/addOnUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineAddOn'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
patch:
summary: Update details for an Add-On.
description: Update details for an Add-On.
operationId: updateAddOn
parameters:
- $ref: '#/components/parameters/addOnUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineAddOn'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
is_required:
type: boolean
description: Indicates whether or not this add-on is required.
name:
type: string
description: The name of the add-on.
notes:
type: string
description: Notes for this add-on.
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/discounts:
post:
summary: Create a new Discount for a quote item
description: Attach a new Discount to a QuoteItem
operationId: CreateDiscount
tags:
- Quotes
responses:
201:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineDiscount'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
quote_item:
type: string
description: (Required) The UUID of the quote item to tie the add-on to.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
discount_definition:
type: string
description: The UUID of the Discount definition to generate the Discount from.
example: f0f5bd9d-62a1-4e59-bc0e-4dbaa55d1ef9
name:
type: string
description: The name of the Discount. Don't provide this value if using a Discount definition.
notes:
type: string
description: Notes for this Discount.
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/discounts/{discountUuid}:
get:
summary: Get details for an Discount.
description: Get details for a Discount.
operationId: getDiscount
parameters:
- $ref: '#/components/parameters/discountUuid'
- in: query
name: expand
schema:
type: string
required: false
description: 'Expand fields that provides UUID(s) to provide the full object(s) instead. Valid choices are: ''discount_quantities''.'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineDiscount'
404:
description: Not found response
content:
text/plain:
schema:
title: Discount not found
type: string
example: 'Error: Not Found'
patch:
summary: Update fields on a Discount.
description: Update field on a Discount.
operationId: updateDiscount
parameters:
- $ref: '#/components/parameters/discountUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLineDiscount'
404:
description: Not found response
content:
text/plain:
schema:
title: Discount not found
type: string
example: 'Error: Not Found'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The name of the Discount. The name can only be updated if the Discount was not added via a definiton.
notes:
type: string
description: Notes for this Discount.
costing_variable_overrides:
$ref: '#/components/schemas/CostingVariableOverrides'
delete:
summary: Delete a Discount.
operationId: deleteDiscount
parameters:
- $ref: '#/components/parameters/discountUuid'
tags:
- Quotes
responses:
204:
description: Successful response
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/pricing_items/{pricingItemUuid}:
get:
summary: Get details for a Pricing Item.
description: Get details for a Pricing Item.
operationId: getPricingItem
parameters:
- $ref: '#/components/parameters/pricingItemUuid'
tags:
- Quotes
responses:
200:
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteLinePricingItem'
404:
description: Not found response
content:
text/plain:
schema:
title: Quote not found
type: string
example: 'Error: Not Found'
servers:
- url: '{url}/{version}'
variables:
url:
default: https://api.paperlessparts.com
version:
default: v2
/quotes/public/{quoteUuid}/files:
post:
summary: Create quote file
description: Upload a supporting file to a quote.
operationId: createQuoteFile
parameters:
- $ref: '#/components/parameters/quote
# --- truncated at 32 KB (96 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paperless-parts/refs/heads/main/openapi/paperless-parts-quotes-api-openapi.yml