---
title: "List work orders for a property"
method: GET
path: "/v2/maintenance/properties/{property_id}/work_orders"
tags: ["Maintenance"]
---

# List work orders for a property

`GET /v2/maintenance/properties/{property_id}/work_orders`

Returns a paginated list of maintenance work orders for a property.

Use this endpoint to retrieve work orders that EliseAI has for a specific
property. Results use cursor-based pagination; pass the `next_cursor` value
from the previous response as `cursor` to fetch the next page.

If you use this API to sync work orders with another system, this endpoint can
be used for reads, backfills, or reconciliation. Use the returned Elise `id` as
`work_order_id` when correlating with `work_order_event` webhooks or when
updating by Elise ID. If your system prefers to key updates by its own work-order
ID, provide `external_work_order_id` when creating a work order through this API,
or return `external_work_order_id` from a `WorkOrderCreated` webhook response so
EliseAI can store your system's ID.

**Result window**: This endpoint returns work orders created on or after
January 1, 2025 UTC. Older records are not returned.

**Status filtering**: Use `statuses[]` to filter by one or more statuses; this
endpoint does not support a separate `status` query parameter.

**Resident-facing fields**: Work orders include status, category,
scheduling/access details, assigned technician names, updates, and completion
notes when those fields are available.

**Created by values**:

| Value | Meaning |
|-------|---------|
| `AI` | Created by Elise MaintenanceAI. |
| `Resident` | Created by a resident through the Resident App. |
| `Agent` | Created by your team in EliseCRM, the Maintenance App, or the Maintenance Web Portal. |
| `PMS` | Synced from your property management system. |
| `Project` | Created from an Elise maintenance project. |

**Access Control**: You must have access to the specified property to view its
work orders.

## Path parameters

- `property_id` string, required — The property ID

## Query parameters

- `limit` integer — Number of work orders to return (max 500)
- `cursor` string — Pagination cursor from previous response. Use the next_cursor value from the previous response to get the next page.
- `statuses[]` WorkOrderStatus[] — Only return work orders with these statuses. Repeat this parameter to filter by multiple statuses.

## Response `200`

Successful Response

- ListWorkOrdersResponse — List of work orders with pagination metadata.
  - `work_orders` WorkOrderListItem[], required — Array of work order objects
    - `id` string, required — Unique Elise identifier for this work order
    - `unit_number` string — Unit number where the work is needed
    - `issue_id` string — Elise maintenance issue taxonomy identifier
    - `category` string — Resident-facing issue category name
    - `status` 'Paused' | 'NotStarted' | 'InProgress' | 'OnHold' | 'AwaitingParts' | 'AwaitingVendor' | 'ResidentDeniedAccess' | 'Completed' | 'Closed' — Lifecycle status of a maintenance work order. These are the public statuses exposed through the Maintenance API. Completed and Closed are terminal states.
    - `description` string — Free-text description of the issue
    - `priority` 'Low' | 'Medium' | 'High' | 'Emergency', required — Urgency level of a work order.
    - `permission_to_enter` 'pending' | 'granted' | 'not_applicable' — Whether the maintenance team has permission to enter the unit.
    - `access_instructions` string — Resident-provided instructions for accessing the unit
    - `preferred_time_windows` PreferredTimeWindows — Resident-preferred scheduling windows captured with permission-to-enter.
      - `timezone` string — Timezone for interpreting preferred scheduling windows
      - `rules` union[] — Preferred scheduling window rules
        - union
          - string
          - PreferredTimeWindowRule — A scheduling preference rule for when maintenance may enter the unit.
            - `type` string — Rule type, such as weekly, date_range, or one_off
            - `days_of_week` string[] — Days of week for weekly rules
            - `start_time` string — Start time for weekly or date-range rules
            - `end_time` string — End time for weekly or date-range rules
            - `start_date` string — Start date for date-range rules
            - `end_date` string — End date for date-range rules
            - `start` string — Start datetime for one-off rules
            - `end` string — End datetime for one-off rules
    - `assignee_names` string[] — Names of assigned technicians
    - `scheduled_time` string, date-time — Scheduled date/time for the work (ISO 8601)
    - `completed_date` string, date-time — When the work was completed (ISO 8601, null if still open)
    - `notes` string — General work-order notes
    - `closing_notes` string — Resolution notes, when completed or closed
    - `created_by` 'AI' | 'Resident' | 'Agent' | 'API' | 'PMS' | 'Project', required — Origin of the work order.
  - `pagination` CursorMeta, required — Cursor metadata for cursor-based pagination. Use the cursor token to fetch the next page of results. If null, there are no more pages.
    - `next_cursor` string — Opaque cursor token for fetching the next page
    - `has_more` boolean, required — Indicates if more pages are available

## Other responses

- `400` — Bad request - invalid parameters
- `401` — Unauthorized - invalid or missing API key
- `403` — Forbidden - insufficient permissions
- `404` — Not found - resource doesn't exist
- `422` — Unprocessable entity - validation error
- `500` — Internal server error

---

[API](https://skmtc.net/eliseai/apis/elise-api.md) · [All operations](https://skmtc.net/eliseai/apis/elise-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/eliseai/elise-api/versions/a75af086c674/schema)
