Shop-Ware Estimates API
The Estimates API from Shop-Ware — 2 operation(s) for estimates.
The Estimates API from Shop-Ware — 2 operation(s) for estimates.
openapi: 3.0.1
info:
title: API V1 API Partners Estimates API
version: v1
contact:
name: API Support
email: support@shop-ware.com
security:
- api_partner_id: []
api_secret: []
tags:
- name: Estimates
paths:
/api/v1/tenants/{tenant_id}/estimates/{estimate_id}/canned_jobs/{canned_job_id}:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
- name: estimate_id
in: path
required: true
example: '2'
schema:
type: integer
- name: canned_job_id
in: path
required: true
example: '1'
schema:
type: integer
put:
summary: Add canned job as service
tags:
- Estimates
responses:
'200':
description: successful
content:
application/json:
examples:
successful:
value:
id: 2
created_at: '2026-06-09T14:22:43Z'
updated_at: '2026-06-09T14:22:43Z'
number: 11340
odometer: 90321
odometer_out: null
state: estimate
customer_id: 3
technician_id: 1
advisor_id: 2
vehicle_id: 1
detail: Key tag 84, customer waiting
preferred_contact_type: Text
part_discount_cents: null
labor_discount_cents: null
shop_id: 2
status_id: 1
taxable: true
customer_source: Repeat
supply_fee_cents: 3250
part_discount_percentage: null
labor_discount_percentage: null
customer_concern: example of reason for customers to visit
vehicle_use: example of primary use of vehicle
started_at: null
closed_at: null
picked_up_at: null
due_in_at: '2026-06-12T14:22:43Z'
due_out_at: null
part_tax_rate: 0.0
labor_tax_rate: 0.0
hazmat_tax_rate: 0.0
sublet_tax_rate: 0.0
services:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:43Z'
title: Warning Light On
completed: false
category_id: 4
row_order: 1
fixed_price_cents: null
canned_job_id: 1
comment: ''
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
completed_at: null
last_completed_at: null
labors:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:42Z'
name: Advise on proper course of action
technician_id: 1
taxable: false
hours: 0.13
row_order: 1
parts:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:42Z'
brand: Superbright
description: 194 LED - AMBER 120*
number: WLED-A-120
quoted_price_cents: 395
cost_cents: 85
part_inventory_id: 1
taxable: false
sell_price_cents: 395
quantity: 2.0
quantity_needed: 1.0
hazmats:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:42Z'
name: Recycling fee
fee_cents: 2000
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:42Z'
name: Windshield repair
price_cents: 1999
cost_cents: 999
provider: Windshield Bros.
invoice_number: '1111'
description: windshield provider
taxable: true
vendor_id: 1
invoice_date: '2026-06-10T14:22:42Z'
inspections:
- id: 1
created_at: '2026-06-09T14:22:42Z'
updated_at: '2026-06-09T14:22:42Z'
name: Measure tire tread depth
state: red
payments: []
integrator_tags:
- id: 1
created_at: '2026-06-09T14:22:43Z'
updated_at: '2026-06-09T14:22:43Z'
taggable_type: RepairOrder
taggable_id: 2
name: tag_name
value: tag_value
label:
id: 1
text: Test
color_code: '#FFFFFF'
row_order: 1
schema:
type: object
properties:
id:
type: integer
description: Unique identifier of this record.
number:
type: integer
description: The RO number.
odometer:
type: integer
nullable: true
odometer_out:
type: integer
nullable: true
state:
type: string
description: Only 'estimate'.
status_id:
type: integer
nullable: true
description: A foreign key which points to a Status.id. Represents the Status for this RO.
customer_id:
type: integer
description: A foreign key which points to a Customer.id. Represents the Customer for this RO.
technician_id:
type: integer
nullable: true
description: A foreign key which points to a Staff.id. Represents the technician assigned to this RO.
advisor_id:
type: integer
nullable: true
description: A foreign key which points to a Staff.id. Represents the service advisor assigned to this RO.
vehicle_id:
type: integer
description: A foreign key which points to a Vehicle.id. Represents the vehicle for this RO.
shop_id:
type: integer
description: A foreign key which points to a Shop.id. Represents the Shop for this RO.
detail:
type: string
nullable: true
description: Notes made by the staff about this RO.
preferred_contact_type:
type: string
nullable: true
description: How the customer prefers to receive progress updates about this RO. One of 'Waiting', 'Phone', 'Email', 'Text'. More contact types may be added.
part_discount_cents:
type: integer
nullable: true
description: The total amount in cents parts are discounted on this RO, subtracted from the parts subtotal before tax. This will be null if part_discount_percentage is non-null.
labort_discount_cents:
type: integer
nullable: true
description: The total amount in cents labor is discounted on this RO, subtracted from the labor subtotal before tax. This will be null if labor_discount_percentage is non-null.
part_discount_percentage:
type: number
nullable: true
labor_discount_percentage:
type: number
nullable: true
started_at:
type: string
nullable: true
format: date-time
description: The datetime the RO was started and transitioned to 'in_progress' state, or null if the RO is still an estimate.
closed_at:
type: string
nullable: true
format: date-time
description: The datetime the RO was closed and transitioned to 'invoice' state, or null if the RO is not yet an invoice.
picked_up_at:
type: string
nullable: true
format: date-time
description: The datetime the vehicle was marked as 'picked up', or null if the vehicle is still in the shop.
due_in_at:
type: string
nullable: true
format: date-time
description: The datetime the vehicle was scheduled to be dropped off.
due_out_at:
type: string
nullable: true
format: date-time
description: The datetime the vehicle was scheduled to be picked up.
part_tax_rate:
type: number
description: The tax rate applied to parts on this RO.
labor_tax_rate:
type: number
description: The tax rate applied to labor on this RO.
sublet_tax_rate:
type: number
description: The tax rate applied to sublets on this RO.
hazmat_tax_rate:
type: number
description: The tax rate applied to hazmats and fees on this RO.
taxable:
type: boolean
description: Determines if tax rates will apply on this RO.
customer_concern:
type: string
nullable: true
description: Represents the reason for Customer's Visit
vehicle_use:
type: string
nullable: true
description: Represents the primary use of vehicle
customer_source:
type: string
nullable: true
description: 'The marketing source of the customer for this RO. Example: "Repeat", "Referral", "Website", etc.'
supply_fee_cents:
type: integer
nullable: true
fleet_po:
type: string
nullable: true
description: Fleet purchase order number.
services:
type: array
items:
type: object
properties:
id:
type: integer
description: The service primary key.
title:
type: string
completed:
type: boolean
description: True if the service has been marked as completed by a staff member, false otherwise.
category_id:
type: integer
labor_rate_cents:
type: integer
nullable: true
description: The rate in cents that labor on this service is charged at.
fixed_price_cents:
type: integer
nullable: true
description: The price in cents that this service will be charged at.
fixed_price_labor_total_cents:
type: integer
nullable: true
description: The total price in cents that labors on this service will be charged at.
is_fixed_price_service:
type: boolean
description: Determines if this service has a fixed price.
canned_job_id:
type: integer
nullable: true
description: A foreign key which points to a CannedJob.id. Represents the canned job assigned to this specific service item.
comment:
type: text
description: Service comments.
completed_at:
type: string
nullable: true
format: date-time
description: The datetime the service was marked completed
last_completed_at:
type: string
nullable: true
format: date-time
description: The datetime the service was last marked completed. This may occur if the service had been marked completed then restarted and marked completed again.
row_order:
type: integer
description: Sequence number of service.
labors:
type: array
items:
type: object
properties:
id:
type: integer
description: The labor primary key.
name:
type: string
description: The name of this labor as it appears on the RO.
technician_id:
type: integer
description: A foreign key which points to a Staff.id. Represents the technician assigned to this specific labor item.
taxable:
type: boolean
description: Determines if labor tax rate will be applied to this labor.
hours:
type: number
row_order:
type: integer
description: Sequence number of labor.
created_at:
type: string
format: date-time
description: The date and time when labor was created.
updated_at:
type: string
format: date-time
description: The date and time when labor was last updated.
parts:
type: array
items:
type: object
properties:
id:
type: integer
description: The part primary key.
brand:
type: string
description: The part brand.
description:
type: string
description: The part description.
number:
type: string
description: The part number.
quoted_price_cents:
type: integer
description: The price of this part that is being sold to the customer in cents per unit.
deprecated: true
sell_price_cents:
type: integer
description: The price of this part that is being sold to the customer in cents per unit.
cost_cents:
type: integer
description: The wholesale cost of this part to the shop in cents per unit.
part_inventory_id:
type: integer
description: A foreign key which points to an Inventory.id. Represents the associated inventory and quantity information for this part.
quantity:
type: number
description: The number of units this part line item represents.
taxable:
type: boolean
description: Determines if part tax rate will be applied to this part.
quantity_needed:
type: number
description: The number of parts needed for service.
created_at:
type: string
format: date-time
description: The date and time when part was created.
updated_at:
type: string
format: date-time
description: The date and time when part was last updated.
hazmats:
type: array
items:
type: object
properties:
id:
type: integer
description: The hazmat primary key.
name:
type: string
description: The name of this hazmat as it appears on the RO.
fee_cents:
type: integer
description: The price of this fee or hazmat in cents per unit.
quantity:
type: number
description: The number of units.
taxable:
type: boolean
description: Determines if hazmat tax rate will be applied to this hazmat.
created_at:
type: string
format: date-time
description: The date and time when hazmat was created.
updated_at:
type: string
format: date-time
description: The date and time when hazmat was last updated.
sublets:
type: array
items:
type: object
properties:
id:
type: integer
description: The sublet primary key.
name:
type: string
description: The name of this sublet as it appears on the RO.
price_cents:
type: integer
description: The price in cents of sublet being sold to customer.
cost_cents:
type: integer
description: The amount in cents paid to provider for services.
provider:
type: string
description: The name of the entity providing services for sublet.
invoice_number:
type: string
description: A string which identifies invoice from provider.
description:
type: string
description: The sublet description.
invoice_date:
type: string
format: date-time
description: The date when the invoice from provider was created.
taxable:
type: boolean
description: Determines if sublet tax rate will be applied to this sublet.
vendor_id:
type: integer
description: A foreign key which points to a Vendor.id. Represents a vendor associated with this sublet item.
created_at:
type: string
format: date-time
description: The date and time when sublet was created.
updated_at:
type: string
format: date-time
description: The date and time when sublet was last updated.
inspections:
type: array
items:
type: object
properties:
id:
type: integer
description: The inspection primary key.
name:
type: string
description: The name of this inspection as it appears on the RO.
state:
type: string
description: One of "yellow", "green", "unchecked", "red". More states may be added.
created_at:
type: string
format: date-time
description: The date and time when inspection was created.
updated_at:
type: string
format: date-time
description: The date and time when inspection was last updated.
created_at:
type: string
format: date-time
description: The date and time when service was created.
updated_at:
type: string
format: date-time
description: The date and time when service was last updated.
payments:
type: array
items:
type: object
properties:
id:
type: integer
description: The payment primary key.
repair_order_id:
type: integer
description: A foreign key which points to a RepairOrder.id
payment_type:
type: string
description: 'The display name of the payment type. Payment types are customizable for each shop. Examples: "Other", "Credit Card", "Check", "Cash", "Credit Card - Visa", and "Other - Warranty".'
payment_type_details:
type: object
properties:
type:
type: string
name:
type: string
nullable: true
notes:
type: string
description: Staff-entered notes about this payment.
amount_cents:
type: integer
description: The total payment amount, in cents.
integrator_tags:
type: array
items:
type: object
properties:
id:
type: integer
description: The tag primary key.
taggable_type:
type: string
description: Entity type the tag attached to.
taggable_id:
type: integer
description: Entity identifier the tag attached to.
name:
type: string
description: Tag Name.
value:
type: string
description: Tag Value.
created_at:
type: string
format: date-time
description: The date and time when tag was created.
updated_at:
type: string
format: date-time
description: The date and time when tag was last updated.
created_at:
type: string
format: date-time
description: The date and time when payment was created.
updated_at:
type: string
format: date-time
description: The date and time when payment was last updated.
integrator_tags:
type: array
items:
type: object
properties:
id:
type: integer
description: The tag primary key.
taggable_type:
type: string
description: Entity type the tag attached to.
taggable_id:
type: integer
description: Entity identifier the tag attached to.
name:
type: string
description: Tag Name.
value:
type: string
description: Tag Value.
created_at:
type: string
format: date-time
description: The date and time when tag was created.
updated_at:
type: string
format: date-time
description: The date and time when tag was last updated.
label:
type: object
nullable: true
properties:
id:
type: integer
description: Unique identifier of this record.
text:
type: string
nullable: true
description: The description of the label.
color_code:
type: string
nullable: true
description: The color code of which the label is represented.
row_order:
type: integer
nullable: true
description: Order of this specific label.
created_at:
type: string
format: date-time
description: Date and time when record was created.
updated_at:
type: string
format: date-time
description: Date and time when record was last updated.
/api/v1/tenants/{tenant_id}/estimates/{estimate_id}/services/{service_id}:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
- name: estimate_id
in: path
required: true
example: '2'
schema:
type: integer
- name: service_id
in: path
required: true
example: '1'
schema:
type: integer
delete:
summary: Delete service
tags:
- Estimates
responses:
'200':
description: successful
content:
application/json:
examples:
successful:
value:
id: 2
created_at: '2026-06-09T14:22:46Z'
updated_at: '2026-06-09T14:22:46Z'
number: 11340
odometer: 90321
odometer_out: null
state: estimate
customer_id: 3
technician_id: 1
advisor_id: 2
vehicle_id: 1
detail: Key tag 84, customer waiting
preferred_contact_type: Text
part_discount_cents: null
labor_discount_cents: null
shop_id: 2
status_id: 1
taxable: true
customer_source: Repeat
supply_fee_cents: 3250
part_discount_percentage: null
labor_discount_percentage: null
customer_concern: example of reason for customers to visit
vehicle_use: example of primary use of vehicle
started_at: null
closed_at: null
picked_up_at: null
due_in_at: '2026-06-12T14:22:46Z'
due_out_at: null
part_tax_rate: 0.0
labor_tax_rate: 0.0
hazmat_tax_rate: 0.0
sublet_tax_rate: 0.0
services: []
payments: []
integrator_tags:
- id: 1
created_at: '2026-06-09T14:22:46Z'
updated_at: '2026-06-09T14:22:46Z'
taggable_type: RepairOrder
taggable_id: 2
name: tag_name
value: tag_value
label:
id: 1
text: Test
color_code: '#FFFFFF'
row_order: 1
schema:
type: object
properties:
id:
type: integer
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shop-ware/refs/heads/main/openapi/shop-ware-estimates-api-openapi.yml