Shop-Ware Recommendations API
The Recommendations API from Shop-Ware — 2 operation(s) for recommendations.
The Recommendations API from Shop-Ware — 2 operation(s) for recommendations.
openapi: 3.0.1
info:
title: API V1 API Partners Recommendations API
version: v1
contact:
name: API Support
email: support@shop-ware.com
security:
- api_partner_id: []
api_secret: []
tags:
- name: Recommendations
paths:
/api/v1/tenants/{tenant_id}/recommendations:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
get:
summary: Get a list of all recommendations
tags:
- Recommendations
parameters:
- name: page
in: query
required: false
example: '1'
schema:
type: integer
- name: per_page
in: query
required: false
example: '30'
schema:
type: integer
- name: updated_after
in: query
required: false
format: date-time
description: Filter response to only include records updated after a given time
example: 2022-10-24T12%3A00%3A00%2B08%3A00
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
examples:
successful:
value:
results:
- id: 2
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
description: null
approved: null
approver_id: null
approval_type: null
imported: false
quick_price_cents: 355000.0
service: {}
repair_order_id: 3
approval_at: null
integrator_tags: []
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
description: Test Service
approved: 'true'
approver_id: null
approval_type: null
imported: false
quick_price_cents: null
service:
id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
title: Test Service
completed: false
category_id: null
row_order: 1
fixed_price_cents: null
canned_job_id: null
comment: ''
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
labors:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
name: Test labor 1
technician_id: null
taxable: true
hours: 1.0
row_order: 1
parts:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
brand: null
description: null
number: null
quoted_price_cents: null
cost_cents: null
part_inventory_id: 1
taxable: true
sell_price_cents: null
quantity: 1.0
quantity_needed: 0.0
hazmats:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
name: Test hazmat fee 1
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
name: Test sublet 1
price_cents: 50
cost_cents: null
provider: ''
invoice_number: '1111'
description: null
taxable: true
vendor_id: null
invoice_date: null
inspections:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
name: Test inspection 1
state: null
repair_order_id: 2
approval_at: null
integrator_tags:
- id: 1
created_at: '2026-06-09T14:24:48Z'
updated_at: '2026-06-09T14:24:48Z'
taggable_type: Recommendation
taggable_id: 1
name: tag_name
value: tag_value
limit: 2
limited: false
total_count: 2
current_page: 1
total_pages: 1
schema:
type: object
properties:
results:
type: array
items:
type: object
properties:
id:
type: integer
description: Unique identifier of this record.
description:
type: string
nullable: true
description: The title of the recommended service
approved:
type: string
nullable: true
description: '"true" if the recommendation has been approved by the customer, "false" if it has been declined, and null otherwise.'
approver_id:
type: integer
nullable: true
description: A foreign key that points to a Staff or Customer ID. This represents the person who approved the recommendation (if it has been approved, null otherwise).
approval_type:
type: string
nullable: true
description: 'Type of approval: One of "customer", "email", "person", and "phone". Null if unapproved or declined.'
imported:
type: boolean
description: True if the recommendation has been added as a service on a Repair Order, false otherwise.
quick_price_cents:
type: number
nullable: true
description: Quick price in cents
service:
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
nullable: true
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
nullable: true
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
nullable: true
description: The part brand.
description:
type: string
nullable: true
description: The part description.
number:
type: string
nullable: true
description: The part number.
quoted_price_cents:
type: integer
nullable: true
description: The price of this part that is being sold to the customer in cents per unit.
deprecated: true
sell_price_cents:
type: integer
nullable: true
description: The price of this part that is being sold to the customer in cents per unit.
cost_cents:
type: integer
nullable: true
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
nullable: true
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
nullable: true
description: The sublet description.
invoice_date:
type: string
nullable: true
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
nullable: true
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
nullable: true
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.
repair_order_id:
type: integer
nullale: true
description: A foreign key that points to the RepairOrder that this Recommendation belongs to
approval_at:
type: string
nullable: true
format: date-time
description: Date the recommendation was approved if it has been approved, null otherwise.
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: Date and time when record was created.
updated_at:
type: string
format: date-time
description: Date and time when record was last updated.
limit:
type: integer
limited:
type: boolean
total_count:
type: integer
current_page:
type: integer
total_pages:
type: integer
post:
summary: Create a recommendation
tags:
- Recommendations
parameters: []
responses:
'201':
description: successful
content:
application/json:
examples:
successful:
value:
id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
description: Test Service 1
approved: 'true'
approver_id: null
approval_type: null
imported: false
quick_price_cents: null
service:
id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
title: Test Service 1
completed: false
category_id: null
row_order: 1
fixed_price_cents: null
canned_job_id: null
comment: ''
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
labors:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
name: Test labor 2
technician_id: null
taxable: true
hours: 1.0
row_order: 1
parts:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
brand: null
description: null
number: null
quoted_price_cents: null
cost_cents: null
part_inventory_id: 1
taxable: true
sell_price_cents: null
quantity: 1.0
quantity_needed: 0.0
hazmats:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
name: Test hazmat fee 2
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
name: Test sublet 2
price_cents: 50
cost_cents: null
provider: ''
invoice_number: '1111'
description: null
taxable: true
vendor_id: null
invoice_date: null
inspections:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
name: Test inspection 2
state: null
repair_order_id: 2
approval_at: null
integrator_tags:
- id: 1
created_at: '2026-06-09T14:24:51Z'
updated_at: '2026-06-09T14:24:51Z'
taggable_type: Recommendation
taggable_id: 1
name: tag_name
value: tag_value
schema:
type: object
properties:
id:
type: integer
description: Unique identifier of this record.
description:
type: string
nullable: true
description: The title of the recommended service
approved:
type: string
nullable: true
description: '"true" if the recommendation has been approved by the customer, "false" if it has been declined, and null otherwise.'
approver_id:
type: integer
nullable: true
description: A foreign key that points to a Staff or Customer ID. This represents the person who approved the recommendation (if it has been approved, null otherwise).
approval_type:
type: string
nullable: true
description: 'Type of approval: One of "customer", "email", "person", and "phone". Null if unapproved or declined.'
imported:
type: boolean
description: True if the recommendation has been added as a service on a Repair Order, false otherwise.
quick_price_cents:
type: number
nullable: true
description: Quick price in cents
service:
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
nullable: true
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
nullable: true
description: A foreign key which points to a Staff.id. Represe
# --- truncated at 32 KB (84 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shop-ware/refs/heads/main/openapi/shop-ware-recommendations-api-openapi.yml