Shop-Ware Services API
The Services API from Shop-Ware — 2 operation(s) for services.
The Services API from Shop-Ware — 2 operation(s) for services.
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/shop-ware-services-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: V1 API Partners Services API
version: v1
contact:
name: API Support
email: support@shop-ware.com
servers:
- url: https://api.shop-ware.com
description: Base URL declared by the provider in apis.yml (roadmap#122).
security:
- api_partner_id: []
api_secret: []
tags:
- name: Services
paths:
/api/v1/tenants/{tenant_id}/services:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
get:
summary: Get a list of all services
tags:
- Services
parameters:
- name: repair_order_id
in: query
required: false
description: A foreign key which points to a WorkOrder.id. Represents the repair order related with this service.
example: null
schema:
type: integer
- name: technician_id
in: query
required: false
description: Filter response to only include Services with labors assigned to this Technican ID.
example: null
schema:
type: integer
- name: updated_after
in: query
required: false
format: date-time
description: Filter response to only include Services updated after a given time
example: '2026-09-08T14:25:34Z'
schema:
type: string
responses:
'200':
description: successful
content:
application/json:
examples:
without filter:
value:
results:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 2
completed_at: null
last_completed_at: null
labors:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
name: Test labor 6
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
brand: null
description: null
number: null
quoted_price_cents: null
cost_cents: null
part_inventory_id: 2
taxable: true
sell_price_cents: null
quantity: 1.0
hazmats:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
name: Test hazmat fee 6
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
name: Test sublet 6
price_cents: 50
cost_cents: null
provider: ''
invoice_number: '1111'
description: null
taxable: true
vendor_id: null
invoice_date: null
inspections:
- id: 2
created_at: '2026-09-09T14:25:23Z'
updated_at: '2026-09-09T14:25:23Z'
name: Test inspection 6
state: null
- id: 1
created_at: '2026-06-09T14:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 1
completed_at: null
last_completed_at: null
labors:
- id: 1
created_at: '2026-06-09T14:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
name: Test labor 5
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 1
created_at: '2026-06-09T14:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
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
hazmats:
- id: 1
created_at: '2026-06-09T14:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
name: Test hazmat fee 5
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
name: Test sublet 5
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:25:23Z'
updated_at: '2026-06-09T14:25:23Z'
name: Test inspection 5
state: null
limit: 2
limited: false
total_count: 2
current_page: 1
total_pages: 1
filtering by repair_order_id:
value:
results:
- id: 1
created_at: '2026-06-09T14:25:26Z'
updated_at: '2026-06-09T14:25:27Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 1
completed_at: null
last_completed_at: null
labors:
- id: 1
created_at: '2026-06-09T14:25:27Z'
updated_at: '2026-06-09T14:25:27Z'
name: Test labor 7
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 1
created_at: '2026-06-09T14:25:27Z'
updated_at: '2026-06-09T14:25:27Z'
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
hazmats:
- id: 1
created_at: '2026-06-09T14:25:27Z'
updated_at: '2026-06-09T14:25:27Z'
name: Test hazmat fee 7
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:25:27Z'
updated_at: '2026-06-09T14:25:27Z'
name: Test sublet 7
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:25:27Z'
updated_at: '2026-06-09T14:25:27Z'
name: Test inspection 7
state: null
limit: 1
limited: false
total_count: 1
current_page: 1
total_pages: 1
filtering by technician_id:
value:
results:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 2
completed_at: null
last_completed_at: null
labors:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
name: Test labor 10
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
brand: null
description: null
number: null
quoted_price_cents: null
cost_cents: null
part_inventory_id: 2
taxable: true
sell_price_cents: null
quantity: 1.0
hazmats:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
name: Test hazmat fee 10
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
name: Test sublet 10
price_cents: 50
cost_cents: null
provider: ''
invoice_number: '1111'
description: null
taxable: true
vendor_id: null
invoice_date: null
inspections:
- id: 2
created_at: '2026-09-09T14:25:30Z'
updated_at: '2026-09-09T14:25:30Z'
name: Test inspection 10
state: null
- id: 1
created_at: '2026-06-09T14:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 1
completed_at: null
last_completed_at: null
labors:
- id: 1
created_at: '2026-06-09T14:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
name: Test labor 9
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 1
created_at: '2026-06-09T14:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
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
hazmats:
- id: 1
created_at: '2026-06-09T14:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
name: Test hazmat fee 9
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 1
created_at: '2026-06-09T14:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
name: Test sublet 9
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:25:30Z'
updated_at: '2026-06-09T14:25:30Z'
name: Test inspection 9
state: null
limit: 2
limited: false
total_count: 2
current_page: 1
total_pages: 1
filtering by updated_after:
value:
results:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
title: Test Service
completed: false
category_id: null
canned_job_id: null
comment: No comment
fixed_price_cents: null
fixed_price_labor_total_cents: null
is_fixed_price_service: false
labor_rate_cents: 10000
repair_order_id: 2
completed_at: null
last_completed_at: null
labors:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
name: Test labor 12
technician_id: null
taxable: true
hours: 1.0
parts:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
brand: null
description: null
number: null
quoted_price_cents: null
cost_cents: null
part_inventory_id: 2
taxable: true
sell_price_cents: null
quantity: 1.0
hazmats:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
name: Test hazmat fee 12
fee_cents: 25
taxable: true
quantity: 1.0
sublets:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
name: Test sublet 12
price_cents: 50
cost_cents: null
provider: ''
invoice_number: '1111'
description: null
taxable: true
vendor_id: null
invoice_date: null
inspections:
- id: 2
created_at: '2026-09-09T14:25:34Z'
updated_at: '2026-09-09T14:25:34Z'
name: Test inspection 12
state: null
limit: 1
limited: false
total_count: 1
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.
title:
type: string
description: The title of the service.
completed:
type: boolean
description: True if the service has been completed.
category_id:
type:
- integer
- 'null'
description: A foreign key that points to a Category ID.
canned_job_id:
type:
- integer
- 'null'
description: A reference that points to a CannedJob ID.
labor_rate_cents:
type:
- integer
- 'null'
description: The rate in cents that labor on this service is charged at.
fixed_price_cents:
type:
- integer
- 'null'
description: The price in cents that this service will be charged at.
fixed_price_labor_total_cents:
type:
- integer
- 'null'
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.
comment:
type: text
description: Service comments.
completed_at:
type:
- string
- 'null'
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.
last_completed_at:
type:
- string
- 'null'
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.
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.
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 will appear on the RO.
technician_id:
type:
- integer
- 'null'
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
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
- 'null'
description: Part`s brand
description:
type:
- string
- 'null'
description: Part`s description
quoted_price_cents:
type:
- number
- 'null'
description: The price of this part that is being sold to the customer in cents per unit.
deprecated: true
sell_price_cents:
type:
- number
- 'null'
description: The price of this part that is being sold to the customer in cents per unit.
cost_cents:
type:
- number
- 'null'
description: The wholesale cost of this part to the shop in cents per unit.
part_inventory_id:
type:
- integer
- 'null'
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.
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 will appear 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 will appear on the RO.
price_cents:
type: integer
description: The price in cents of sublet being sold to customer.
cost_cents:
type:
- number
- 'null'
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.
invoice_date:
type:
- string
- 'null'
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
- 'null'
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 will appear on the RO.
state:
type:
- string
- 'null'
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.
limit:
type: integer
limited:
type: boolean
total_count:
type: integer
current_page:
type: integer
total_pages:
type: integer
/api/v1/tenants/{tenant_id}/services/{id}:
parameters:
- name: tenant_id
in: path
required: true
example: '1'
schema:
type: integer
- name: id
in: path
required: true
example: '1'
schema:
type: integer
get:
summary: Get a specific service by ID
# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shop-ware/refs/heads/main/openapi/shop-ware-services-api-openapi.yml