openapi: 3.0.3 info: title: Toro Horizon360 Crews Jobs API description: Toro Horizon360 is an all-in-one business management software for landscape contractors. The API provides endpoints for managing crews, schedules, jobs, customers, invoices, equipment, and payments for landscaping businesses. version: 1.0.0 contact: name: Toro Company url: https://horizon360.toro.com/ x-logo: url: https://kinlane-images.s3.amazonaws.com/shared/apis-json/apis-json-logo.jpg servers: - url: https://api.horizon360.toro.com/v1 description: Horizon360 Production API security: - bearerAuth: [] tags: - name: Jobs description: Create and track landscaping jobs and work orders paths: /jobs: get: operationId: listJobs summary: List Jobs description: Returns a paginated list of jobs and work orders. tags: - Jobs parameters: - name: status in: query schema: type: string enum: - pending - scheduled - in_progress - completed - invoiced description: Filter by job status - name: customerId in: query schema: type: string description: Filter by customer ID - name: startDate in: query schema: type: string format: date description: Filter jobs on or after this date - name: endDate in: query schema: type: string format: date description: Filter jobs on or before this date - name: page in: query schema: type: integer default: 1 - name: limit in: query schema: type: integer default: 25 responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/JobList' post: operationId: createJob summary: Create Job description: Create a new landscaping job or work order. tags: - Jobs requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JobInput' responses: '201': description: Job created content: application/json: schema: $ref: '#/components/schemas/Job' /jobs/{jobId}: get: operationId: getJob summary: Get Job description: Retrieve a specific job by ID. tags: - Jobs parameters: - name: jobId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/Job' '404': $ref: '#/components/responses/NotFound' put: operationId: updateJob summary: Update Job description: Update an existing job record. tags: - Jobs parameters: - name: jobId in: path required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/JobInput' responses: '200': description: Job updated content: application/json: schema: $ref: '#/components/schemas/Job' components: schemas: Job: type: object properties: id: type: string customerId: type: string title: type: string description: type: string status: type: string enum: - pending - scheduled - in_progress - completed - invoiced jobType: type: string serviceAddress: $ref: '#/components/schemas/Address' estimatedHours: type: number actualHours: type: number scheduledDate: type: string format: date completedDate: type: string format: date crewId: type: string notes: type: string createdAt: type: string format: date-time Error: type: object properties: code: type: string message: type: string Address: type: object properties: street: type: string city: type: string state: type: string zip: type: string country: type: string JobList: type: object properties: data: type: array items: $ref: '#/components/schemas/Job' total: type: integer page: type: integer limit: type: integer JobInput: type: object required: - customerId - title - jobType properties: customerId: type: string title: type: string description: type: string jobType: type: string serviceAddress: $ref: '#/components/schemas/Address' estimatedHours: type: number scheduledDate: type: string format: date crewId: type: string notes: type: string responses: NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT