Skip to content

Read Housekeeping task

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

Read an existing instance.

A unit of housekeeping work attached to a room: a stayover clean, a departure clean, a deep clean, a turndown, an inspection. Minted by generate_housekeeping_tasks (which derives the day’s board from occupancy + due-outs and stamps a generation_key so re-runs converge) or by create_housekeeping_task for ad-hoc work (origin says which, and marks a failed inspection’s re-clean). Assignment is the housekeeping_task_assigned_to edge; the per-attendant task sheet is a projection over (assignee, business_date), never a second object to keep in sync. A public area’s work (2026-10-14) is the same object linked housekeeping_task_for_area instead of to a room — a task is for a room or an area, never both, and the public_area_* types are an area’s alone; and a task may be assigned to a worker_group (housekeeping_task_assigned_to_group) instead of a person, until a member starts it. A task is also a request (2026-10-15): requested_by says who asked (a guest’s request links the stay, housekeeping_task_requested_by_stay), due_at when it is due, and it carries a thread of notes (housekeeping_task_entry). area_id, assignee_id and group_id copy the area, person and group edges onto the row.

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.housekeeping_task
properties
required
object
area_id
The public area the task is for (its object id) — the housekeeping_task_for_area edge's target; absent on a room's task
string
assignee_id
The staff member who holds the task (their object id) — the housekeeping_task_assigned_to edge's target; absent while nobody or a worker group holds it
string
block_reason
Why the task is blocked (do-not-disturb workflow)
string
Allowed values: do_not_disturb guest_in_room access_refused maintenance_required other
business_date
Service date the task belongs to
string format: date
completed_at
Completed at
string format: date-time
credits
Credits the task is worth (zero or more) — stamped at creation from the property's housekeeping credit rule for its task type and room type, or set by hand; absent when the house prices none
string format: decimal
due_at
When the work is due — the guest's 'by three o'clock'; absent when the task has no time of its own. Its urgency (overdue, soon, scheduled) is the housekeeping_requests read's
string format: date-time
generation_key
Replay key stamped by generate_housekeeping_tasks (hk:{room}:{date}:{type}, or hk:area:{area}:{date} for a public area's daily clean); absent on manually minted tasks
string
group_id
The worker group that holds the task (its object id) — the housekeeping_task_assigned_to_group edge's target; absent while a person or nobody holds it
string
id
required
Task id
string
inspection_outcome
passed, or failed (the room went back for a re-clean): on an inspection task, its verdict; on a cleaning task, the verdict of the latest inspection of it
string
Allowed values: passed failed
inspection_rating
The supervisor's score, 1 (poor) to 5 (excellent): on an inspection task, the score it gave; on a cleaning task, the score the latest inspection of it gave
integer
notes
Notes
string
origin
Where the task came from: generated (the day's board, with a generation_key), manual (create_housekeeping_task), reclean (a failed inspection sent the cleaning back) or from_triage (a triaged guest request). Absent on tasks minted before it was stamped
string
Allowed values: generated manual reclean from_triage
overdue_at
When the request_overdue sweep found the due time passed with the work still open — the overdue push went out then; absent until it does, and cleared by a re-time into the future
string format: date-time
priority
required
Priority
string
Allowed values: low normal high urgent
requested_at
required
Requested at
string format: date-time
requested_by
Who asked for the work: guest, desk, floor, pms (the house's own state — the generator's room board) or automation (a schedule, an agent or a service). Distinct from origin, which says how the task was minted. Absent on tasks minted before it was stamped
string
Allowed values: guest desk floor pms automation
room_id
The room the task is for (its object id) — the housekeeping_task_for_room edge's target; absent on a public area's task
string
self_rating
The rating the attendant gave their own work at Finish, 1 (poor) to 5 (excellent) — complete tasks only, never an inspection; the supervisor's score is inspection_rating
integer
skip_reason
Why the task was deliberately not done
string
standard_minutes
Minutes the work should take (1 to 1440), stamped beside credits; the pacing report's deviation is measured against it
integer
started_at
When the attendant entered the room
string format: date-time
status
required
Status
string
Allowed values: pending in_progress blocked complete skipped
task_type
required
Task type
string
Allowed values: stayover departure vacant_pickup deep_clean turndown inspection public_area_clean public_area_inspection minibar laundry
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.housekeeping_task",
"properties": {
"block_reason": "do_not_disturb",
"inspection_outcome": "passed",
"origin": "generated",
"priority": "low",
"requested_by": "guest",
"status": "pending",
"task_type": "stayover"
},
"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).