Shop Commander · Developers

API Reference

Every V1 endpoint, generated from the frozen OpenAPI document.

Base URL https://api.shopcommander.com/v1. Every operation needs Authorization: Bearer sc_live_…. Generated from openapi.json (version 1.0.0-rc.4); response shapes are described on the resource pages and pinned by the contract tests.

appointments

GET /v1/appointments

List Appointments

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
scheduled_date_fromstring (date) | null
scheduled_date_tostring (date) | null
statusstring | null
customerstring | null
vehiclestring | null
technicianstring | null
updated_afterstring (date-time) | null
sortstring matching ^(created_at|updated_at)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/appointments

Create Appointment

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
customer_id requiredstring
date requiredstring (date)
duration_minutesinteger
notesstring | null
reasonstring | null
technician_idstring | null
time requiredstring matching ^(?:[01]\d|2[0-3]):[0-5]\d$
utc_offsetstring matching ^(?:[+-](?:0\d|1[0-3]):[0-5]\d|[+-]14:00)$ | null
vehicle_idstring | null

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/appointments/availability

Availability

Query parameters

NameTypeNotes
datestring (date) | null
start_datestring (date) | null
end_datestring (date) | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/appointments/{public_id}

Get Appointment

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PATCH /v1/appointments/{public_id}

Update Appointment

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
datestring (date)
duration_minutesinteger
expected_versioninteger | null
notesstring | null
reasonstring | null
technician_idstring | null
timestring matching ^(?:[01]\d|2[0-3]):[0-5]\d$
utc_offsetstring matching ^(?:[+-](?:0\d|1[0-3]):[0-5]\d|[+-]14:00)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/appointments/{public_id}/cancel

Cancel Appointment

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/appointments/{public_id}/check-in

Check In Appointment

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/appointments/{public_id}/repair-order

Convert To Repair Order

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

canned-jobs

GET /v1/canned-jobs

List Canned Jobs

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
qstring | null
categorystring | null
activeboolean | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/canned-jobs/{public_id}

Get Canned Job

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

customers

GET /v1/customers

List Customers

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
qstring | null
emailstring | null
phonestring | null
external_idstring | null
updated_afterstring (date-time) | null
lifecyclestring matching ^(active|archived|all)$
sortstring matching ^(created_at|updated_at)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/customers

Create Customer

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
addressstring | null
citystring | null
company_namestring | null
emailstring | null
first_name requiredstring
fleet_accountboolean
last_name requiredstring
notesstring | null
phonestring | null
phone_altstring | null
postal_codestring | null
preferred_contactstring matching ^(sms|email|phone)$ | null
regionstring | null
tagsarray of string | null
tax_exemptboolean

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/customers/{public_id}

Get Customer

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PATCH /v1/customers/{public_id}

Update Customer

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
addressstring | null
citystring | null
company_namestring | null
emailstring | null
expected_versioninteger | null
first_namestring
fleet_accountboolean
last_namestring
notesstring | null
phonestring | null
phone_altstring | null
postal_codestring | null
preferred_contactstring matching ^(sms|email|phone)$ | null
regionstring | null
tagsarray of string
tax_exemptboolean

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/customers/{public_id}/archive

Archive Customer

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

DELETE /v1/customers/{public_id}/external-id

Delete Customer External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PUT /v1/customers/{public_id}/external-id

Put Customer External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
external_id requiredstring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

events

GET /v1/events

List Events

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
typestring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/events/{public_id}

Get Event

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

inventory-items

GET /v1/inventory-items

List Inventory Items

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
qstring | null
part_numberstring | null
product_familystring | null
in_stockboolean | null
activeboolean | null
tire_sizestring | null
tire_widthinteger | null
tire_aspect_ratiointeger | null
tire_rim_diameternumber | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/inventory-items/{public_id}

Get Inventory Item

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

invoices

GET /v1/invoices

List Invoices

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
statusstring matching ^(posted|voided)$ | null
doc_typestring matching ^(invoice|credit_note)$ | null
customerstring | null
repair_orderstring | null
numberinteger | null
business_date_fromstring (date) | null
business_date_tostring (date) | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/invoices/{public_id}

Get Invoice

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

jobs

GET /v1/jobs/{public_id}

Get Job

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/jobs/{public_id}/complete

Complete Job

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/jobs/{public_id}/labor

List Job Labor

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/jobs/{public_id}/parts

List Job Parts

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/jobs/{public_id}/start

Start Job

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/jobs/{public_id}/unable-to-complete

Unable To Complete Job

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

payments

GET /v1/payments

List Payments

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
settlement_targetstring matching ^(invoice|warranty_claim)$ | null
repair_orderstring | null
invoicestring | null
business_date_fromstring (date) | null
business_date_tostring (date) | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/payments/{public_id}

Get Payment

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

repair-orders

GET /v1/repair-orders

List Repair Orders

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
statestring matching ^(scheduled|checked_in|estimating|awaiting_authorization|authorized|in_progress|waiting_for_parts|quality_check|completed|ready_for_pickup|invoiced|paid|picked_up|closed|cancelled|unknown)$ | null
customerstring | null
vehiclestring | null
numberinteger | null
created_afterstring (date-time) | null
created_beforestring (date-time) | null
updated_afterstring (date-time) | null
sortstring matching ^(created_at|updated_at)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/repair-orders

Create Repair Order

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
customer_concernstring | null
customer_id requiredstring
odometer_ininteger | null
vehicle_id requiredstring

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/repair-orders/{public_id}

Get Repair Order

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

DELETE /v1/repair-orders/{public_id}/external-id

Delete Repair Order External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PUT /v1/repair-orders/{public_id}/external-id

Put Repair Order External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
external_id requiredstring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/repair-orders/{public_id}/jobs

List Jobs

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/repair-orders/{public_id}/jobs

Add Job

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
canned_job_idstring | null
descriptionstring | null
labor_hoursnumber | string matching ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ | null
namestring | null
technician_idstring | null

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

shop

GET /v1/shop

Get Shop

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

tasks

GET /v1/tasks

List Tasks

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
statusstring | null
assigneestring | null
updated_afterstring (date-time) | null
sortstring matching ^(created_at|updated_at)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/tasks

Create Task

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
assigned_tostring | null
categorystring | null
customer_idstring | null
descriptionstring | null
due_atstring (date-time) | null
prioritystring matching ^(low|normal|high|urgent)$
repair_order_idstring | null
title requiredstring

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/tasks/{public_id}

Get Task

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PATCH /v1/tasks/{public_id}

Update Task

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
assigned_tostring | null
categorystring | null
descriptionstring | null
due_atstring (date-time) | null
prioritystring matching ^(low|normal|high|urgent)$
statusstring matching ^(open|in_progress|blocked|waiting)$
titlestring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/tasks/{public_id}/complete

Complete Task

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

DELETE /v1/tasks/{public_id}/external-id

Delete Task External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PUT /v1/tasks/{public_id}/external-id

Put Task External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
external_id requiredstring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

technicians

GET /v1/technicians

List Technicians

Query parameters

NameTypeNotes
activeboolean | null
limitinteger | null
cursorstring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

vehicles

GET /v1/vehicles

List Vehicles

Query parameters

NameTypeNotes
limitinteger | null
cursorstring | null
customerstring | null
vinstring | null
platestring | null
unit_numberstring | null
qstring | null
external_idstring | null
updated_afterstring (date-time) | null
lifecyclestring matching ^(active|archived|all)$
sortstring matching ^(created_at|updated_at)$ | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/vehicles

Create Vehicle

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
colorstring | null
customer_id requiredstring
license_platestring | null
makestring | null
modelstring | null
notesstring | null
odometerinteger | null
plate_regionstring | null
trimstring | null
unit_numberstring | null
vehicle_typestring | null
vinstring | null
yearinteger | null

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/vehicles/{public_id}

Get Vehicle

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PATCH /v1/vehicles/{public_id}

Update Vehicle

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
colorstring | null
expected_versioninteger | null
license_platestring | null
notesstring | null
odometerinteger
plate_regionstring | null
unit_numberstring | null

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

DELETE /v1/vehicles/{public_id}/external-id

Delete Vehicle External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PUT /v1/vehicles/{public_id}/external-id

Put Vehicle External Id

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
external_id requiredstring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

webhook-endpoints

GET /v1/webhook-endpoints

List Endpoints

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/webhook-endpoints

Create Endpoint

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
descriptionstring | null
event_types requiredarray of string
url requiredstring

Responses: 201 400 401 403 404 409 429 500 503 — errors use the error envelope.

GET /v1/webhook-endpoints/{public_id}

Get Endpoint

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

PATCH /v1/webhook-endpoints/{public_id}

Update Endpoint

Query parameters

NameTypeNotes
Idempotency-Keystring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Request body

FieldTypeNotes
descriptionstring | null
event_typesarray of string
statusstring matching ^(active|disabled)$
urlstring

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/webhook-endpoints/{public_id}/rotate-secret

Rotate Secret

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 200 400 401 403 404 409 429 500 503 — errors use the error envelope.

POST /v1/webhook-endpoints/{public_id}/test

Send Test Event

Query parameters

NameTypeNotes
Idempotency-Key requiredstring matching ^[\x21-\x7E]+$A unique 1-255 character visible-ASCII command key. Same key and canonical body replays for 7 days; changed reuse is rejected for 30 days.

Responses: 202 400 401 403 404 409 429 500 503 — errors use the error envelope.