Shop-Ware Repair Orders API
The Repair Orders API from Shop-Ware — 5 operation(s) for repair orders.
The Repair Orders API from Shop-Ware — 5 operation(s) for repair orders.
openapi: 3.0.1
info:
title: API V1 API Partners Repair Orders API
version: v1
contact:
name: API Support
email: support@shop-ware.com
security:
- api_partner_id: []
api_secret: []
tags:
- name: Repair Orders
paths:
/api/v1/tenants/{tenant_id}/repair_orders/{id}/start:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
- name: id
in: path
required: true
example: '1'
schema:
type: integer
post:
summary: Start a specific repair order
tags:
- Repair Orders
parameters: []
responses:
'200':
description: successful
content:
application/json:
examples:
successful:
value:
id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
number: 11341
odometer: 90321
odometer_out: null
state: in_progress
customer_id: 3
technician_id: 2
advisor_id: 1
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: null
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
fleet_po: null
started_at: null
closed_at: null
picked_up_at: null
due_in_at: '2026-06-12T14:25:00Z'
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:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
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:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
name: Advise on proper course of action
technician_id: 2
taxable: false
hours: 0.13
row_order: 1
parts:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
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: 1.0
quantity_needed: 1.0
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
brand: Superbright
description: 194 LED - AMBER 120*
number: WLED-A-120
quoted_price_cents: 500
cost_cents: 85
part_inventory_id: 1
taxable: false
sell_price_cents: 500
quantity: 1.0
quantity_needed: 0.0
hazmats:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
name: Recycling fee
fee_cents: 2000
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
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:25:00Z'
inspections:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
name: Measure tire tread depth
state: red
payments:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
payment_type: Credit Card - Visa
payment_type_details:
type: Credit Card
name: Visa
notes: Customer made partial payment
amount_cents: 21849
integrator_tags:
- id: 1
created_at: '2026-06-09T14:25:00Z'
updated_at: '2026-06-09T14:25:00Z'
taggable_type: RepairOrder
taggable_id: 1
name: tag_name
value: tag_value
label: null
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: One of 'estimate', 'in_progress', or 'invoice'.
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
description: RO parts discount in percents. This will be null if part_discount_cents is non-null.
labor_discount_percentage:
type: number
nullable: true
description: RO labors discount in percents. This will be null if labor_discount_cents is non-null.
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
description: Shop supplies fee, if manually entered. After the RO is closed, reflects the total amount of supply fees from parts and labor after discounts and caps. This may be null if the RO is not yet closed.
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
description: The price in cents that this service will be charged at.
nullable: true
fixed_price_labor_total_cents:
type: integer
description: The total price in cents that labors on this service will be charged at.
nullable: true
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
description: If you hit a guardrail on a fixed price service, you will get two lines for the part as they could have separate prices
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. For parts with excess quantity beyond guardrails, the excess will appear as a separate part line item with its own pricing.
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.
requestBody:
content:
application/json:
schema:
type: object
properties:
initial_assignee_id:
type: integer
description: A foreign key that points to a Staff.id that will be initially assigned the RO.
send_estimate_email:
type: boolean
description: True if an email should be sent to this RO’s customer’s email address, or false otherwise. This parameter will be ignored if the customer does not have an email address.
required:
- initial_assignee_id
- send_estimate_email
example:
initial_assignee_id: 1
send_estimate_email: true
/api/v1/tenants/{tenant_id}/repair_orders/{id}/share:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
- name: id
in: path
required: true
example: '1'
schema:
type: integer
post:
summary: Share repair order via text
tags:
- Repair Orders
parameters: []
responses:
'200':
description: successful
# --- truncated at 32 KB (246 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shop-ware/refs/heads/main/openapi/shop-ware-repair-orders-api-openapi.yml