Skip to content

What-if Onboard staff member (rollup delta)

POST
/v1/actions/hospitality.action.onboard_staff_member/whatif
curl --request POST \
--url https://api.aerandil.com/v1/actions/hospitality.action.onboard_staff_member/whatif \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "params": { "active": true, "contracted_weekly_hours": "example", "department": "example", "discipline": "front_office", "email": "example", "employee_id": "example", "family_name": "example", "given_name": "example", "most_recent_hire_date": "2026-04-15", "property_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "role": "front_office_agent" }, "return_modified": false }'

What-if projection of apply_hospitality_action_onboard_staff_member — previews the action (execute-and-roll-back) and folds its would-be events into rollup deltas, returning the contribution an apply would make to the daily_rooms fact (ADR / RevPAR / TRevPAR / Occupancy inputs) without persisting anything. Requires the same actions:hospitality.action.onboard_staff_member:apply scope as apply. An action that emits no rooms-fact events yields an empty daily_rooms.

Media typeapplication/json
object
branch

Apply against an open branch’s overlay view instead of the canonical (main) plane. The action’s writes land in the branch’s copy-on-first-write overlay, its events in the branch’s own stream, and the invocation is journaled for merge-by-replay. Branch writes are action-only, so this is the write-side entry point to a branch (POST /v1/branches forks one).

string format: uuid
params
required
object
active
Active (defaults to true)
boolean
contracted_weekly_hours
Contracted hours a week (more than 0, at most 168)
string format: decimal
department
Department
string
discipline
Discipline (coarse ladder for pathway definitions)
string
Allowed values: front_office food_beverage culinary bar housekeeping engineering spa wellness_clinical wellness_coaching sales revenue management other
email
Email
string
employee_id
required
Employee ID (the type's primary key; unique per tenant)
string
family_name
required
Family name
string
given_name
required
Given name
string
most_recent_hire_date
Most recent hire date
string format: date
property_id
Property to scope the staff member at (omit for tenant-wide roles)
string format: uuid
role
required
Role
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
return_modified

When true, the response carries modified_objects and modified_links projections — the engine reads the event log inside the same transaction so the projection observes the handler’s own writes.

boolean

Rollup deltas the action would contribute, computed and rolled back.

Media typeapplication/json
object
daily_rooms
required

Per (property, business_date) additive contribution to the rooms rollup.

Array<object>
object
business_date
required
string format: date
currency

ISO 4217, when the fold observed one.

string
property_id
required
string format: uuid
rooms_revenue_net_delta
required

Decimal, net rooms revenue delta.

string
rooms_sold_delta
required
integer format: int64
total_revenue_net_delta
required

Decimal, net total revenue delta.

string
Examplegenerated
{
"daily_rooms": [
{
"business_date": "2026-04-15",
"currency": "example",
"property_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"rooms_revenue_net_delta": "example",
"rooms_sold_delta": 1,
"total_revenue_net_delta": "example"
}
]
}
Cache-Control
string
Allowed value: no-store

Always no-store — derived, uncommitted data.

Validation error — the apply would be rejected.