Shopmonkey Work Orders API

Create, update, search, and move work orders through shop workflow stages; manage order-level services, parts, labor, fees, tires, subcontracts, authorizations, files, and PDFs. Confirmed against shopmonkey.dev/resources/order.

OpenAPI Specification

shopmonkey-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Shopmonkey API
  description: >-
    The Shopmonkey API is a REST API (current version v3) that lets auto,
    tire, and powersports repair shops integrate their Shopmonkey account -
    Work Orders, Customers, Vehicles, Parts/Inventory, Invoices/Payments,
    Appointments, Employees (Users), Locations, and Webhooks - with other
    business systems. Authentication is a Bearer API key generated in the
    Shopmonkey web app under Settings > Integration > API Keys. Error
    responses return a JSON body with success, code, message, and
    documentation_url fields. Rate limiting returns HTTP 429 with
    Retry-After, X-RateLimit-Limit-Minute, and X-RateLimit-Remaining-Minute
    headers; exact numeric limits are account-specific and not published.
    Paths and methods below are confirmed against the public Shopmonkey
    Developer docs at shopmonkey.dev; request/response schemas are modeled
    (best-effort) from the documented resource fields where full detail was
    not independently reconciled field-by-field.
  version: v3
  contact:
    name: Shopmonkey
    url: https://shopmonkey.dev
externalDocs:
  description: Shopmonkey Developer documentation
  url: https://shopmonkey.dev/overview
servers:
  - url: https://api.shopmonkey.cloud/v3
    description: Shopmonkey production API (v3)
security:
  - bearerAuth: []
tags:
  - name: Work Orders
    description: Create and manage repair orders, order line items (services, parts, labor, fees, tires, subcontracts), authorizations, files, and PDFs.
  - name: Customers
    description: Create, update, search, and manage customer records, emails, and phone numbers.
  - name: Vehicles
    description: Create, update, and look up vehicles, VIN/plate validation, year/make/model data, mileage, and tire-pressure logs.
  - name: Inventory & Parts
    description: Search the parts catalog, find compatible parts, and manage line-item assignments of parts/tires/labor.
  - name: Invoices & Payments
    description: Shared (customer-facing) invoices/PDFs on an order, and manual payment and refund entries.
  - name: Appointments
    description: Schedule, search, confirm, cancel, and update appointments.
  - name: Employees
    description: Manage Shopmonkey users (employees), roles, and the authenticated user's own profile.
  - name: Locations
    description: Manage shop location details for a multi-location company.
  - name: Webhooks
    description: Register and manage webhook subscriptions for Shopmonkey events.
paths:
  /order:
    get:
      operationId: listOrders
      tags: [Work Orders]
      summary: Find all Orders
      description: 'CONFIRMED endpoint (shopmonkey.dev/resources/order). Lists work orders with filtering, pagination, and sorting.'
      responses:
        '200':
          description: A list of orders.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOrder
      tags: [Work Orders]
      summary: Create one Order
      description: CONFIRMED endpoint. Creates a new work order for a customer/vehicle at a location.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderInput'
      responses:
        '200':
          description: The created order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /order/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getOrder
      tags: [Work Orders]
      summary: Find one Order by id
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The requested order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateOrder
      tags: [Work Orders]
      summary: Update one Order by id
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderInput'
      responses:
        '200':
          description: The updated order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /order/{id}/{action}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: action
        in: path
        required: true
        schema:
          type: string
        description: Status transition action (e.g. approve, close, void) applied to the order.
    patch:
      operationId: transitionOrder
      tags: [Work Orders]
      summary: Apply a status action to an Order
      description: CONFIRMED endpoint (path shape). Applies a workflow action/status transition to an order.
      responses:
        '200':
          description: The updated order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /order/{id}/move:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: moveOrder
      tags: [Work Orders]
      summary: Move an Order
      description: CONFIRMED endpoint. Moves an order between workflow columns/statuses.
      responses:
        '200':
          description: The updated order.
  /order/{id}/calculated_pricing:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: calculateOrderPricing
      tags: [Work Orders]
      summary: Calculate pricing for an Order
      description: CONFIRMED endpoint. Returns recalculated pricing totals for the order.
      responses:
        '200':
          description: Calculated pricing.
  /order/{id}/authorization:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listOrderAuthorizations
      tags: [Work Orders]
      summary: Find Order authorizations
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Order authorizations.
    post:
      operationId: createOrderAuthorization
      tags: [Work Orders]
      summary: Request an Order authorization
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Created authorization.
  /order/{id}/authorization/{authorizationId}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: authorizationId
        in: path
        required: true
        schema:
          type: string
    put:
      operationId: updateOrderAuthorization
      tags: [Work Orders]
      summary: Update an Order authorization
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated authorization.
  /order/{id}/file:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: addOrderFile
      tags: [Work Orders]
      summary: Attach a file to an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Attached file.
  /order/{id}/file/{fileId}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: fileId
        in: path
        required: true
        schema:
          type: string
    delete:
      operationId: deleteOrderFile
      tags: [Work Orders]
      summary: Remove a file from an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /order/{id}/pdf:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getOrderPdf
      tags: [Work Orders]
      summary: Get the Order as a PDF
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: PDF binary.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /order/{orderId}/service:
    parameters:
      - $ref: '#/components/parameters/OrderId'
    get:
      operationId: listOrderServices
      tags: [Work Orders]
      summary: Find all Services on an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Order services.
    post:
      operationId: addOrderService
      tags: [Work Orders]
      summary: Add a Service to an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Created service.
  /order/{orderId}/service/{id}:
    parameters:
      - $ref: '#/components/parameters/OrderId'
      - $ref: '#/components/parameters/Id'
    put:
      operationId: updateOrderService
      tags: [Work Orders]
      summary: Update a Service on an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated service.
    delete:
      operationId: deleteOrderService
      tags: [Work Orders]
      summary: Remove a Service from an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /order/{orderId}/part:
    parameters:
      - $ref: '#/components/parameters/OrderId'
    get:
      operationId: listOrderParts
      tags: [Work Orders]
      summary: Find all Parts on an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Order parts.
    post:
      operationId: addOrderPart
      tags: [Work Orders]
      summary: Add a Part to a Service on an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Created part line item.
  /order/{orderId}/part_bulk:
    parameters:
      - $ref: '#/components/parameters/OrderId'
    put:
      operationId: bulkUpdateOrderParts
      tags: [Work Orders]
      summary: Update Bulk Parts for an Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated parts.
  /order_shared/{publicId}/pdf:
    parameters:
      - $ref: '#/components/parameters/PublicId'
    get:
      operationId: getSharedOrderPdf
      tags: [Invoices & Payments]
      summary: Get the customer-shared Order as a PDF
      description: CONFIRMED endpoint. Customer-facing shared-link surface for an order PDF.
      responses:
        '200':
          description: PDF binary.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /order_shared/{publicId}/signed_invoice:
    parameters:
      - $ref: '#/components/parameters/PublicId'
    get:
      operationId: listSignedInvoices
      tags: [Invoices & Payments]
      summary: Find signed invoices for a shared Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Signed invoices.
  /order_shared/{publicId}/signed_invoice/latest:
    parameters:
      - $ref: '#/components/parameters/PublicId'
    get:
      operationId: getLatestSignedInvoice
      tags: [Invoices & Payments]
      summary: Get the latest signed invoice for a shared Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The latest signed invoice.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignedInvoice'
  /order_shared/{publicId}/signed_invoice/{id}/pdf:
    parameters:
      - $ref: '#/components/parameters/PublicId'
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getSignedInvoicePdf
      tags: [Invoices & Payments]
      summary: Get a signed invoice as a PDF
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: PDF binary.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /order_shared/{publicId}/payment:
    parameters:
      - $ref: '#/components/parameters/PublicId'
    get:
      operationId: listSharedOrderPayments
      tags: [Invoices & Payments]
      summary: Find payments recorded against a shared Order
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Payments.
  /integration/payment/search:
    post:
      operationId: searchPayments
      tags: [Invoices & Payments]
      summary: Search for Payment Entries
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching payments.
  /integration/payment/manual/charge:
    post:
      operationId: recordManualPayment
      tags: [Invoices & Payments]
      summary: Record a payment manually
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentInput'
      responses:
        '200':
          description: The recorded payment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
  /integration/payment/manual/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    delete:
      operationId: deleteManualPayment
      tags: [Invoices & Payments]
      summary: Remove a manually-recorded payment
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /integration/payment/manual/refund:
    post:
      operationId: createManualRefund
      tags: [Invoices & Payments]
      summary: Create one Manual Refund
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The created refund.
  /integration/payment/manual/refund/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: updateManualRefund
      tags: [Invoices & Payments]
      summary: Update one Payment/Refund by id
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated refund.
  /integration/payment/manual/refund/{id}/download-pdf:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: downloadRefundPdf
      tags: [Invoices & Payments]
      summary: Download a refund receipt as PDF
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: PDF binary.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /customer:
    post:
      operationId: createCustomer
      tags: [Customers]
      summary: Create a new customer record
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerInput'
      responses:
        '200':
          description: The created customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
  /customer/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCustomer
      tags: [Customers]
      summary: "Fetch a specific customer's details"
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
    put:
      operationId: updateCustomer
      tags: [Customers]
      summary: Update customer information
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The updated customer.
    patch:
      operationId: softDeleteCustomer
      tags: [Customers]
      summary: Soft delete a customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The soft-deleted customer.
  /customer/search:
    post:
      operationId: searchCustomers
      tags: [Customers]
      summary: Search customer entities
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching customers.
  /customer/search-by-email:
    post:
      operationId: searchCustomersByEmail
      tags: [Customers]
      summary: Search customers by email address
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching customers.
  /customer/search-by-phone:
    post:
      operationId: searchCustomersByPhone
      tags: [Customers]
      summary: Search customers by phone number
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching customers.
  /customer/{id}/vehicle:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listCustomerVehicles
      tags: [Customers, Vehicles]
      summary: Retrieve vehicles linked to a customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Vehicles owned by the customer.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Vehicle'
  /customer/{id}/order:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listCustomerOrders
      tags: [Customers, Work Orders]
      summary: Retrieve orders associated with a specific customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Orders for the customer.
  /customer/{parentId}/deferred_service:
    parameters:
      - name: parentId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listCustomerDeferredServices
      tags: [Customers]
      summary: Find all Deferred Services by Customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deferred services.
  /customer/{id}/email:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: addCustomerEmail
      tags: [Customers]
      summary: Create a new email for the specified customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Added email.
  /customer/{id}/email/{emailId}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: emailId
        in: path
        required: true
        schema:
          type: string
    put:
      operationId: updateCustomerEmail
      tags: [Customers]
      summary: Update the specified email for a customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated email.
    delete:
      operationId: deleteCustomerEmail
      tags: [Customers]
      summary: Delete the specified email for a customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /customer/{id}/phone:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: updateCustomerPhone
      tags: [Customers]
      summary: "Update a customer's phone number"
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated phone.
  /customer/{id}/phone/{phoneId}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: phoneId
        in: path
        required: true
        schema:
          type: string
    delete:
      operationId: deleteCustomerPhone
      tags: [Customers]
      summary: Remove a phone number from a customer record
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /vehicle:
    post:
      operationId: createVehicle
      tags: [Vehicles]
      summary: Create a new Vehicle record
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VehicleInput'
      responses:
        '200':
          description: The created vehicle.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
  /vehicle/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getVehicle
      tags: [Vehicles]
      summary: Retrieve a single Vehicle by id
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The requested vehicle.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vehicle'
    put:
      operationId: updateVehicle
      tags: [Vehicles]
      summary: Update an existing Vehicle record
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The updated vehicle.
    patch:
      operationId: softDeleteVehicle
      tags: [Vehicles]
      summary: Soft-delete a Vehicle
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The soft-deleted vehicle.
  /vehicle/{id}/link:
    parameters:
      - $ref: '#/components/parameters/Id'
    post:
      operationId: linkVehicleToCustomer
      tags: [Vehicles]
      summary: Associate a Vehicle with a customer
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Linked vehicle.
  /vehicle/years:
    get:
      operationId: listVehicleYears
      tags: [Vehicles]
      summary: Retrieve available vehicle production years
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Years.
  /vehicle/makes:
    get:
      operationId: listVehicleMakes
      tags: [Vehicles]
      summary: List vehicle manufacturers
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Makes.
  /vehicle/models:
    get:
      operationId: listVehicleModels
      tags: [Vehicles]
      summary: Fetch available vehicle models
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Models.
  /vehicle/submodels:
    get:
      operationId: listVehicleSubmodels
      tags: [Vehicles]
      summary: Get vehicle submodel variations
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Submodels.
  /vehicle/ymm:
    get:
      operationId: searchVehicleByYmm
      tags: [Vehicles]
      summary: Search vehicle year/make/model combinations
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching YMM combinations.
  /vehicle/vin/validate:
    get:
      operationId: validateVin
      tags: [Vehicles]
      summary: Validate a VIN number
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: VIN validation result.
  /vehicle/license-plate/validate:
    get:
      operationId: validateLicensePlate
      tags: [Vehicles]
      summary: Validate a license plate
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: License plate validation result.
  /vehicle/{id}/orders:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listVehicleOrders
      tags: [Vehicles, Work Orders]
      summary: List service orders for a vehicle
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Orders for the vehicle.
  /vehicle/{id}/deferred-services:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listVehicleDeferredServices
      tags: [Vehicles]
      summary: List pending/deferred service items for a vehicle
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deferred services.
  /vehicle/{id}/owners:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listVehicleOwners
      tags: [Vehicles]
      summary: Retrieve vehicle ownership history
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Owners.
    put:
      operationId: updateVehicleOwners
      tags: [Vehicles]
      summary: Update owner information
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated owners.
    delete:
      operationId: removeVehicleOwner
      tags: [Vehicles]
      summary: Remove an owner record
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /vehicle/{id}/mileage-logs:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listVehicleMileageLogs
      tags: [Vehicles]
      summary: Retrieve mileage records
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Mileage logs.
    post:
      operationId: addVehicleMileageLog
      tags: [Vehicles]
      summary: Create a mileage log entry
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Created mileage log.
    put:
      operationId: updateVehicleMileageLog
      tags: [Vehicles]
      summary: Modify a mileage record
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated mileage log.
    delete:
      operationId: deleteVehicleMileageLog
      tags: [Vehicles]
      summary: Delete a mileage record
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /vehicle/{id}/tire-pressure-logs:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: listTirePressureLogs
      tags: [Vehicles]
      summary: Retrieve tire pressure records
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Tire pressure logs.
    post:
      operationId: addTirePressureLog
      tags: [Vehicles]
      summary: Record tire pressure data
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Created tire pressure log.
    delete:
      operationId: deleteTirePressureLog
      tags: [Vehicles]
      summary: Remove tire pressure records
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /part:
    get:
      operationId: listParts
      tags: [Inventory & Parts]
      summary: Find ALL Parts
      description: CONFIRMED endpoint. Retrieves the shop's parts inventory.
      responses:
        '200':
          description: Parts.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Part'
  /part/summary:
    get:
      operationId: getPartsSummary
      tags: [Inventory & Parts]
      summary: Find ALL Parts Summary
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Parts summary.
  /part/search:
    post:
      operationId: searchParts
      tags: [Inventory & Parts]
      summary: Search for specific parts by criteria
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Matching parts.
  /part/compatible:
    post:
      operationId: findCompatibleParts
      tags: [Inventory & Parts]
      summary: Find Compatible Options
      description: CONFIRMED endpoint. Locates parts compatible with a given vehicle.
      responses:
        '200':
          description: Compatible parts.
  /line_item_assignment:
    get:
      operationId: listLineItemAssignments
      tags: [Inventory & Parts]
      summary: Find line item assignments to parts and tires
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Line item assignments.
  /line_item_assignment/bulk:
    put:
      operationId: bulkAssignLineItems
      tags: [Inventory & Parts]
      summary: Bulk-assign line items to parts, tires, or labor
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Updated assignments.
  /appointment:
    get:
      operationId: listAppointments
      tags: [Appointments]
      summary: Find all Appointments
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Appointments.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Appointment'
    post:
      operationId: createAppointment
      tags: [Appointments]
      summary: Create a new appointment
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentInput'
      responses:
        '200':
          description: The created appointment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
  /appointment/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getAppointment
      tags: [Appointments]
      summary: Find one Appointment by id
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The requested appointment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
    put:
      operationId: updateAppointment
      tags: [Appointments]
      summary: Update one appointment
      description: CONFIRMED endpoint. Supports recurring appointment modifications.
      responses:
        '200':
          description: The updated appointment.
    delete:
      operationId: deleteAppointment
      tags: [Appointments]
      summary: Remove an appointment
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Deleted.
  /appointment/search:
    post:
      operationId: searchAppointments
      tags: [Appointments]
      summary: Search for appointments
      description: CONFIRMED endpoint. Supports date range, customer, order, and technician filters.
      responses:
        '200':
          description: Matching appointments.
  /appointment/{id}/confirm:
    parameters:
      - $ref: '#/components/parameters/Id'
    patch:
      operationId: confirmAppointment
      tags: [Appointments]
      summary: Confirm an Appointment
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The confirmed appointment.
  /appointment/{id}/cancel:
    parameters:
      - $ref: '#/components/parameters/Id'
    patch:
      operationId: cancelAppointment
      tags: [Appointments]
      summary: Cancel an Appointment
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: The cancelled appointment.
  /user:
    get:
      operationId: listUsers
      tags: [Employees]
      summary: Find all users
      description: CONFIRMED endpoint.
      responses:
        '200':
          description: Users.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
    post:
      operationId: createUser
      tags: [Employees]
      summary: Create one User
      description: CONFIRMED endpoint.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserInput'
      responses:
        '200':
          description: The created user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
  /user/logged-in:
    get:
      operationId: getLoggedInUser
      tags: [Employees]
  

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shopmonkey/refs/heads/main/openapi/shopmonkey-openapi.yml