---
title: "Work Order Event Webhook"
method: POST
path: "work_order_event"
---

# Work Order Event Webhook

`POST work_order_event` (webhook)

Whenever a work order is created, updated, cancelled, or completed in EliseAI,
we will post the event to your registered webhook. Use these events to keep
an external system in sync with Elise-originated work-order changes. If that
system also creates or updates work orders, it can send those changes back
through the Maintenance API.

Webhooks can be registered at the organization level or the property level.
Please reach out to the EliseAI support team to register your webhooks.

Event Types:
* **WorkOrderCreated:** Posted whenever a new maintenance work order is created in EliseAI
* **WorkOrderUpdated:** Posted whenever an existing work order is updated
* **WorkOrderCancelled:** Posted whenever a work order transitions to `Closed`
* **WorkOrderCompleted:** Posted whenever a work order transitions to `Completed`

Each delivery includes an `X-Signature` header: an HMAC SHA-256 hex digest
of the JSON request body, signed with your registered webhook secret.

**Linking your work-order ID:** if you create a matching work order in your
own system when you receive **WorkOrderCreated**, respond with a JSON body
containing your system's work-order identifier and EliseAI will store it:

```json
{"external_work_order_id": "WO-12345"}
```

The response body must be a JSON object with `external_work_order_id` as a
top-level key. String IDs are stored as-is after trimming whitespace; numeric
IDs are accepted and stored as strings. Once linked, future webhook payloads
include `external_work_order_id`, and you can update the work order through
`PATCH /v2/maintenance/work_orders/external/{external_work_order_id}` without
tracking the EliseAI work order ID.

If your integration will update EliseAI by `work_order_id` instead, returning
`external_work_order_id` is optional. If you omit it, EliseAI still treats a
successful HTTP response as a successful webhook delivery, but your system's
work-order ID will remain unknown to EliseAI.

For **WorkOrderUpdated**, **WorkOrderCompleted**, and **WorkOrderCancelled**,
EliseAI only uses the HTTP success/failure status. Response bodies for those
events are ignored.

Work order events will include:
* **event_id:** Unique identifier for the event. Use this for idempotency/deduplication.
* **type:** The type of event that occurred
* **event_date:** Date and time of the event
* **elise_property_id:** Elise identifier for the property
* **external_property_id:** External identifier for the property
* **work_order_id:** Elise identifier for the work order (numeric ID as string)
* **external_work_order_id:** Your external work-order identifier, if EliseAI has one
* **unit_id:** Elise unit identifier (numeric ID as string), if applicable
* **unit_number:** Unit number associated with the work order
* **resident_uuid:** Resident UUID from the residents API (if applicable)
* **status:** Current status. Possible values: `Started`, `Submitted`, `Scheduled`, `Paused`, `NotStarted`, `InProgress`, `OnHold`, `AwaitingParts`, `AwaitingVendor`, `ResidentDeniedAccess`, `DoneReadyToInvoice`, `DoneReadyForReview`, `Completed`, `Closed`.
* **priority:** Priority level (Low, Medium, High, Emergency)
* **category:** Category of the issue (e.g., Plumbing, Electrical, HVAC)
* **description:** Description of the issue
* **assignee_names:** Names of assigned technicians
* **scheduled_time:** When work is scheduled
* **completed_date:** When the work was completed
* **notes:** General notes
* **closing_notes:** Resolution notes
* **created_by:** How the work order was created. Public values: `AI`, `Resident`, `Agent`, `API`, `PMS`, `Project`.

## Payload

- union
  - WorkOrderCreatedEvent
    - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
    - `type` 'WorkOrderCreated' — Sent when a new work order is created in EliseAI.
    - `event_date` string, date-time, required — When EliseAI generated the event.
    - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Maintenance API.
    - `external_property_id` string — Property identifier from the external integration setup, when configured.
    - `work_order_id` string, required — Elise work-order identifier. Use this when updating the work order by Elise ID.
    - `external_work_order_id` string — Your external work-order identifier, if EliseAI has one. EliseAI stores this from API-created work orders or from a WorkOrderCreated webhook response body.
    - `unit_id` string — Elise unit identifier (numeric ID as string), when the work order is unit-scoped.
    - `unit_number` string — Human-readable unit number, when the work order is unit-scoped.
    - `resident_uuid` string — Resident UUID from the residents API, when the work order is resident-scoped.
    - `status` string, required — Current lifecycle status. Possible values: Started, Submitted, Scheduled, Paused, NotStarted, InProgress, OnHold, AwaitingParts, AwaitingVendor, ResidentDeniedAccess, DoneReadyToInvoice, DoneReadyForReview, Completed, Closed.
    - `priority` string, required — Priority level. One of Low, Medium, High, or Emergency.
    - `category` string — Display category for the work-order issue.
    - `description` string — Free-text description of the maintenance issue.
    - `assignee_names` string[] — Names of assigned technicians, when assigned.
    - `scheduled_time` string, date-time — Scheduled date/time for the work, when scheduled.
    - `completed_date` string, date-time — Completion date/time, when completed.
    - `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.
  - WorkOrderUpdatedEvent
    - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
    - `type` 'WorkOrderUpdated' — Sent when an existing work order is updated in EliseAI.
    - `event_date` string, date-time, required — When EliseAI generated the event.
    - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Maintenance API.
    - `external_property_id` string — Property identifier from the external integration setup, when configured.
    - `work_order_id` string, required — Elise work-order identifier. Use this when updating the work order by Elise ID.
    - `external_work_order_id` string — Your external work-order identifier, if EliseAI has one. EliseAI stores this from API-created work orders or from a WorkOrderCreated webhook response body.
    - `unit_id` string — Elise unit identifier (numeric ID as string), when the work order is unit-scoped.
    - `unit_number` string — Human-readable unit number, when the work order is unit-scoped.
    - `resident_uuid` string — Resident UUID from the residents API, when the work order is resident-scoped.
    - `status` string, required — Current lifecycle status. Possible values: Started, Submitted, Scheduled, Paused, NotStarted, InProgress, OnHold, AwaitingParts, AwaitingVendor, ResidentDeniedAccess, DoneReadyToInvoice, DoneReadyForReview, Completed, Closed.
    - `priority` string, required — Priority level. One of Low, Medium, High, or Emergency.
    - `category` string — Display category for the work-order issue.
    - `description` string — Free-text description of the maintenance issue.
    - `assignee_names` string[] — Names of assigned technicians, when assigned.
    - `scheduled_time` string, date-time — Scheduled date/time for the work, when scheduled.
    - `completed_date` string, date-time — Completion date/time, when completed.
    - `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.
  - WorkOrderCancelledEvent
    - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
    - `type` 'WorkOrderCancelled' — Sent when a work order transitions to Closed.
    - `event_date` string, date-time, required — When EliseAI generated the event.
    - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Maintenance API.
    - `external_property_id` string — Property identifier from the external integration setup, when configured.
    - `work_order_id` string, required — Elise work-order identifier. Use this when updating the work order by Elise ID.
    - `external_work_order_id` string — Your external work-order identifier, if EliseAI has one. EliseAI stores this from API-created work orders or from a WorkOrderCreated webhook response body.
    - `unit_id` string — Elise unit identifier (numeric ID as string), when the work order is unit-scoped.
    - `unit_number` string — Human-readable unit number, when the work order is unit-scoped.
    - `resident_uuid` string — Resident UUID from the residents API, when the work order is resident-scoped.
    - `status` string, required — Current lifecycle status. Possible values: Started, Submitted, Scheduled, Paused, NotStarted, InProgress, OnHold, AwaitingParts, AwaitingVendor, ResidentDeniedAccess, DoneReadyToInvoice, DoneReadyForReview, Completed, Closed.
    - `priority` string, required — Priority level. One of Low, Medium, High, or Emergency.
    - `category` string — Display category for the work-order issue.
    - `description` string — Free-text description of the maintenance issue.
    - `assignee_names` string[] — Names of assigned technicians, when assigned.
    - `scheduled_time` string, date-time — Scheduled date/time for the work, when scheduled.
    - `completed_date` string, date-time — Completion date/time, when completed.
    - `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.
  - WorkOrderCompletedEvent
    - `event_id` string, required — Unique identifier for this webhook event. Use for idempotency and deduplication.
    - `type` 'WorkOrderCompleted' — Sent when a work order transitions to Completed.
    - `event_date` string, date-time, required — When EliseAI generated the event.
    - `elise_property_id` string, required — Elise property identifier. This is the property_id used by the Maintenance API.
    - `external_property_id` string — Property identifier from the external integration setup, when configured.
    - `work_order_id` string, required — Elise work-order identifier. Use this when updating the work order by Elise ID.
    - `external_work_order_id` string — Your external work-order identifier, if EliseAI has one. EliseAI stores this from API-created work orders or from a WorkOrderCreated webhook response body.
    - `unit_id` string — Elise unit identifier (numeric ID as string), when the work order is unit-scoped.
    - `unit_number` string — Human-readable unit number, when the work order is unit-scoped.
    - `resident_uuid` string — Resident UUID from the residents API, when the work order is resident-scoped.
    - `status` string, required — Current lifecycle status. Possible values: Started, Submitted, Scheduled, Paused, NotStarted, InProgress, OnHold, AwaitingParts, AwaitingVendor, ResidentDeniedAccess, DoneReadyToInvoice, DoneReadyForReview, Completed, Closed.
    - `priority` string, required — Priority level. One of Low, Medium, High, or Emergency.
    - `category` string — Display category for the work-order issue.
    - `description` string — Free-text description of the maintenance issue.
    - `assignee_names` string[] — Names of assigned technicians, when assigned.
    - `scheduled_time` string, date-time — Scheduled date/time for the work, when scheduled.
    - `completed_date` string, date-time — Completion date/time, when completed.
    - `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.

## Acknowledgement `200`

Successful Response

- unknown

## Other responses

- `422` — Validation 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/revisions/a75af086c674/schema)
