# Serviced Jobs ## List serviced jobs **get** `/serviced-jobs` Returns a paginated list of completed jobs for the authenticated company. By default only completed jobs are returned (`only_completed` defaults to `true`). Results are ordered by `created_at` (newest first). The `service_date` is taken from the first visit's start time. `total_received` and `total_outstanding` are in dollars. **Note:** When `service_date_range_start` or `service_date_range_end` are provided, filtering is applied against the first visit's start time. Because this is evaluated after the database query, pagination totals reflect the filtered count. ### Query Parameters - `limit: optional number` Number of results per page (max 1000) - `only_completed: optional boolean` When `true` (default), only return jobs with status `Completed`. Set to `false` to include all non-archived, non-quote jobs. - `page: optional number` Page number (1-based) - `service_date_range_end: optional string` Return jobs whose first visit starts on or before this date (ISO 8601) - `service_date_range_start: optional string` Return jobs whose first visit starts on or after this date (ISO 8601) ### Header Parameters - `"rotor-api-version": "1.1.0"` - `"1.1.0"` ### Returns - `data: optional array of object { id, customer, service_date, 4 more }` - `id: optional string` - `customer: optional object { id, company_name, first_name, last_name }` - `id: optional string` - `company_name: optional string` - `first_name: optional string` - `last_name: optional string` - `service_date: optional string` Start time of the first visit - `service_plan_id: optional string` ID of the associated service plan (job series), if applicable - `technicians: optional array of object { email, name, user_id }` Technicians assigned to this job (from assigned_to and crew assignments) - `email: optional string` - `name: optional string` - `user_id: optional string` - `total_outstanding: optional number` Remaining balance due (in dollars) - `total_received: optional number` Net amount paid (invoices minus refunds, in dollars) - `pagination: optional object { has_more, limit, page, total }` - `has_more: optional boolean` Whether more pages are available - `limit: optional number` - `page: optional number` - `total: optional number` Total number of matching records - `status: optional string` ### Example ```http curl https://api.getrotor.com/open-api/serviced-jobs \ -H "x-api-key: $ROTOR_API_KEY" ``` #### Response ```json { "data": [ { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "customer": { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "company_name": "company_name", "first_name": "first_name", "last_name": "last_name" }, "service_date": "2026-06-15T08:00:00Z", "service_plan_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "technicians": [ { "email": "dev@stainless.com", "name": "John Doe", "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e" } ], "total_outstanding": 0, "total_received": 150 } ], "pagination": { "has_more": true, "limit": 50, "page": 1, "total": 142 }, "status": "success" } ```