Shop Commander · Developers

Example Integrations

Three worked patterns — a website booking form, a live shop dashboard, and an accounting export.

1. Website appointment booking

Scopes: shop.read, customers.read, customers.write, vehicles.read, vehicles.write, appointments.read, appointments.write.

  1. Show availability: GET /v1/appointments/availability?date=2026-09-14 returns the shop's open slots for that day, already respecting hours, closures, and capacity.
  2. Find or create the customer: GET /v1/customers?phone=4165550123; if empty, POST /v1/customers with an Idempotency-Key derived from your form submission id.
  3. Find or create the vehicle: GET /v1/vehicles?customer=cus_…&plate=ABCD123, else POST /v1/vehicles.
  4. Book: POST /v1/appointments (Idempotency-Key required) with customer_id, vehicle_id, date, time, duration_minutes, reason, and the customer's concern in notes. A 409 with shop_hours or technician_capacity blockers means the slot went away — re-fetch availability and offer another.
  5. Stay in sync: subscribe to appointment.status_changed so your confirmation page reflects a shop-side reschedule or cancellation.

2. Custom shop dashboard

Scopes: shop.read, repair_orders.read, appointments.read, technicians.read, invoices.read.

3. Accounting export

Scopes: invoices.read, payments.read, customers.read.

More patterns

Fleet maintenance sync (unit_number filter + external ids + repair_order.* events), CRM two-way sync (updated_after crawls + customer.*/vehicle.* events + expected_version on writes), tire-shop websites (GET /v1/inventory-items?tire_size=225/65R17&in_stock=true), and warranty-to-task automation (tasks.write) all compose from the same primitives. The AI-agent guide condenses the rules a coding agent needs to build any of them.