Skip to content

Read Work order

GET
/v1/object-types/hospitality.work_order/objects/{id}
curl --request GET \
--url https://api.aerandil.com/v1/object-types/hospitality.work_order/objects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>'

Read an existing instance.

A maintenance request, typically against a room or venue. Tracks severity (cosmetic through to safety) through an explicit lifecycle: assign, schedule, start, complete (with a resolution), void (with a reason). Whether the room is out of order while the order is open is never a flag here — it is a real room_status_block held via work_order_holds_block, minted through the same code path as take_room_out_of_order and released on completion. The order is a thread (2026-10-13): its work_order_entry lines log notes, time, parts, hand-offs, the postponement and the resolution; it may name the equipment it is for (work_order_for_asset, its id carried as asset_id) and the guest stay that reported it (work_order_reported_by_stay), and postpone_work_order defers it to a named date (resume_work_order brings it back when the date comes). A hand-off on the thread stamps delegated_to_role until the order closes. Since 2026-10-15 a fault is for a room (work_order_for_room) or a public area (work_order_for_area, create_public_area_work_order), never both; it may name the room element it is in and the fault_type it was raised from; and it carries its holder’s id (assignee_id, or a worker group’s group_id) beside the edge every assigning verb moves.

id
required
string format: uuid

Object id (UUID v7, server-generated at create time).

branch
string format: uuid

Read through an open branch’s copy-on-first-write overlay view instead of the canonical (main) plane. Does not compose with as_of (422). The branch must exist under the caller’s tenant.

Object found.

Media typeapplication/json
object
created_at
required
string format: date-time
id
required
string format: uuid
object_type
required
Allowed value: hospitality.work_order
properties
required
object
area_id
The public area the fault is in (its object id) — the `work_order_for_area` edge's target; absent for a room's order
string
asset_id
The asset the order is for (its object id) — the `work_order_for_asset` edge's target; absent when the order names no equipment
string
assignee_id
The staff member who holds the order (its object id) — the `work_order_assigned_to` edge's target; written by every verb that moves the edge
string
block_reason
What the work is waiting on while blocked
string
category
required
Category
string
Allowed values: hvac plumbing electrical furniture fixtures networking audio_visual structural exterior safety other
delegated_to_role
The staff role the order was last handed to by a delegation line on its thread (present until it completes or is voided)
string
Allowed values: front_office_agent front_office_supervisor concierge bell housekeeper housekeeping_supervisor engineer food_beverage_server food_beverage_manager chef spa_therapist spa_manager reservations_agent revenue_manager sales_manager manager_on_duty general_manager owner other runner
description
Description
string
element
The room element the fault is in (light, air_conditioning, shower …) — the attendant's word for it; `category` is the trade that mends it
string
Allowed values: light air_conditioning curtain safe door television phone wardrobe shower mirror toilet pipework minibar electrical other
fault_type_id
The fault type the order was raised from (its object id) — the `work_order_of_fault_type` edge's target
string
group_id
The worker group that holds the order (its object id) — the `work_order_assigned_to_group` edge's target; never beside `assignee_id`
string
id
required
Work order id
string
maintenance_plan_id
The maintenance plan that raised this order (its object id); absent otherwise
string
postpone_reason
Why the order was postponed (present while postponed)
string
postponed_until
The date a postponed order is deferred to (present while postponed)
string format: date
postponed_until_at
The instant the house's day reaches postponed_until (its local midnight) — when the standing sweep brings the order back with resume_work_order (present while postponed)
string format: date-time
reported_at
required
Reported at
string format: date-time
reported_by_guest
Whether a guest reported the fault — true when the order names the reporting stay (`work_order_reported_by_stay`) or the triaged guest message that raised it
boolean
resolution
What was actually done
string
resolved_at
Resolved at
string format: date-time
scheduled_for
Date the work is committed to
string format: date
severity
required
Severity
string
Allowed values: cosmetic minor major blocking safety
started_at
When the engineer started
string format: date-time
status
required
Status
string
Allowed values: open scheduled in_progress blocked complete void postponed
title
required
Title
string
void_reason
Why a voided order was withdrawn
string
provenance

Per-property source attribution and pins. An entry under properties means the property’s current value came from that source (on the source’s own clock, source_updated_at); an entry under pins is a human override protecting the property from sourced writes.

object
pins
object
key
additional properties
object
pinned_at
string format: date-time
pinned_by
object
reason
required
string
properties
object
key
additional properties
object
external_id
string
recorded_at
required
string format: date-time
source
required
string
source_updated_at
string format: date-time
stream
string
scope
required
One of: discriminator: level
object
level
required
string
Allowed value: tenant
Allowed values: tenant
tenant_id
required
string format: uuid
updated_at
required
string format: date-time
version
required
integer
>= 1
Example
{
"object_type": "hospitality.work_order",
"properties": {
"category": "hvac",
"delegated_to_role": "front_office_agent",
"element": "light",
"severity": "cosmetic",
"status": "open"
},
"scope": {
"level": "tenant"
}
}
ETag
string
/^"\d+"$/

Quoted strong validator (RFC 7232 §2.3) carrying the object’s monotonic version. Informational on the read path — object mutation goes through typed actions on /v1/actions/{action}/apply, not raw CRUD.

No object with that id (or soft-deleted).