---
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` or
`WorkOrderUpdated` webhook response when your integration configuration supports
external-ID link-back. See the `work_order_event` webhook entry in this OpenAPI
specification for details.

**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.

**Scope filtering**: Use `scope=team` to return only work orders created by your
team through the POST work-order API. The default `scope=all` returns all work
orders visible for the property. `team` does not refer to the maintenance team
assigned to a work order.

**Work-order ID filtering**: Use `work_order_ids[]` to filter by one or more
Elise work-order IDs returned in the `id` field. Provide up to 100 IDs. These
are Elise IDs, not `external_work_order_id` values. ID values are ORed together
and combined with other filters.

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

**Resident filtering**: Use `resident_ids[]` to filter by one or more Elise
public resident UUIDs, or `external_resident_ids[]` to filter by one or more
third-party resident identifiers from an external property management system.
Repeat either parameter to supply multiple values. Values across both parameters
are ORed together. Responses include all linked Elise public resident UUIDs.

**Updated-at filtering**: Use `updated_at_start` and `updated_at_end` to return
work orders updated within a timestamp window.

**Ordering**: Work orders are ordered by `updated_at` descending.

**Source 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. |
| `API` | Created through this public API. |
| `PMS` | Synced from your property management system. |
| `Project` | Created from an Elise maintenance project. |

`created_by` contains the Elise public resident UUID for the resident who
created the work order, when known. `created_by_external_id` contains that
resident's external/PMS identifier, when known.

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

## Path parameters

- `property_id` integer, required

## 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.
- `scope` 'all' | 'team' — Which visible work orders to include in the list response. TEAM means the stored creator vendor matches the authenticated API vendor.
- `work_order_ids[]` integer[] — Only return work orders whose Elise work-order ID matches one of these values. Provide up to 100 IDs. These are Elise IDs returned in the id field, not external_work_order_id values.
- `statuses[]` WorkOrderStatus[] — Only return work orders with these statuses. Repeat this parameter to filter by multiple statuses.
- `resident_ids[]` string[] — Only return work orders associated with these Elise public resident UUIDs. Repeat this parameter to filter by multiple residents (max 100).
- `external_resident_ids[]` string[] — Only return work orders associated with these third-party resident identifiers from an external property management system. Repeat this parameter to filter by multiple residents (max 100).
- `updated_at_start` string, date-time — Only return work orders last updated at or after this timestamp (ISO 8601).
- `updated_at_end` string, date-time — Only return work orders last updated before this timestamp (ISO 8601).

## 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
    - `property_id` string — Elise property identifier for this work order
    - `sub_building` string — Sub-building name for phased communities, when present
    - `resident_ids` string[] — Elise public resident UUIDs linked to this work order. Empty when no residents are linked.
    - `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)
    - `due_date` string, date-time — Due date/time for the work (ISO 8601)
    - `created_at` string, date-time — When the work order was created (ISO 8601)
    - `updated_at` string, date-time — When the work order was last modified (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
    - `source` 'AI' | 'Resident' | 'Agent' | 'API' | 'PMS' | 'Project', required — Origin of the work order.
    - `created_by` string — Elise resident UUID for the resident who created the work order. Null when the creator is not a resident or cannot be resolved.
    - `created_by_external_id` string — External/PMS resident identifier for the resident who created the work order. Null when the creator is not a resident, has no external resident identifier, or cannot be resolved unambiguously.
  - `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

## Changes

> 32 revisions in range; 1 not diffed.

- **2026-09-09** `be9585390ad5` — 1 breaking
  - for the `path` request parameter `property_id`, the type changed from `string` to `integer`
- **2026-09-02** `ae9ddb715cb1` — 2 breaking, 3 info
  - the response property `work_orders/items/created_by` became optional for the status `200`
  - the `work_orders/items/created_by` response's property type changed from no type to `string` for status `200`
  - added the optional property `work_orders/items/created_by_external_id` to the response with the `200` status
  - removed `#/components/schemas/WorkOrderCreatedBy` from the `work_orders/items/created_by` response property `allOf` list for the response status `200`
  - …1 more
- **2026-08-15** `ebf464d02938` — 2 info
  - added the new optional `query` request parameter `scope`
  - added the new optional `query` request parameter `work_order_ids[]`
- **2026-08-14** `ef846cc9eb14` — 1 info
  - added the optional property `work_orders/items/due_date` to the response with the `200` status
- **2026-08-11** `b4ebf60d6d89` — 1 info
  - added the optional property `work_orders/items/created_at` to the response with the `200` status

[Full history](https://skmtc.dev/eliseai/apis/elise-api/changes/v2/maintenance/properties/:property_id/work_orders/get.md)

---

[API](https://skmtc.dev/eliseai/apis/elise-api.md) · [All operations](https://skmtc.dev/eliseai/apis/elise-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eliseai/apis/elise-api/revisions/d62e286f89d1?raw)
