openapi: 3.0.3 info: title: Shopmonkey Appointments Customers 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 servers: - url: https://api.shopmonkey.cloud/v3 description: Shopmonkey production API (v3) security: - bearerAuth: [] tags: - name: Customers description: Create, update, search, and manage customer records, emails, and phone numbers. paths: /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 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 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. components: parameters: Id: name: id in: path required: true schema: type: string description: Resource identifier. schemas: CustomerInput: type: object required: - firstName - lastName properties: firstName: type: string lastName: type: string email: type: string phone: type: string additionalProperties: true Customer: type: object properties: id: type: string firstName: type: string lastName: type: string emails: type: array items: type: object properties: id: type: string email: type: string phones: type: array items: type: object properties: id: type: string number: type: string additionalProperties: true description: MODELED from documented customer email/phone sub-resources. Vehicle: type: object properties: id: type: string vin: type: string year: type: string make: type: string model: type: string submodel: type: string licensePlate: type: string additionalProperties: true description: MODELED from documented vehicle lookup endpoints (years/makes/models/submodels/vin/ymm). securitySchemes: bearerAuth: type: http scheme: bearer description: 'API key generated in the Shopmonkey web app under Settings > Integration > API Keys, sent as `Authorization: Bearer `.' externalDocs: description: Shopmonkey Developer documentation url: https://shopmonkey.dev/overview