Skip to content

What-if Define automation (rollup delta)

POST
/v1/actions/hospitality.action.define_automation/whatif
curl --request POST \
--url https://api.aerandil.com/v1/actions/hospitality.action.define_automation/whatif \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "params": { "approval_policy_ref": "example", "condition_kind": "object_set_added", "cron_expression": "example", "description_text": "example", "display_name": "example", "effect_action": "example", "effect_function": "example", "effect_kind": "apply_action", "effect_notification_template": "example", "effect_params_template": {}, "event_type_ref": "example", "execution_mode": "per_object", "max_cascade_depth": 1, "modified_property_watch": "example", "object_set_filter": "example", "object_type_ref": "example", "requires_approval": true }, "return_modified": false }'

What-if projection of apply_hospitality_action_define_automation — 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.define_automation: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
approval_policy_ref
Approval policy the staged gate opens under (required when requires_approval)
string
condition_kind
required
Trigger-predicate class
string
Allowed values: object_set_added object_set_removed object_set_modified object_set_all time_cron event_named
cron_expression
Schedule for time_cron (5-field cron)
string
description_text
What this automation is for
string
display_name
required
Human-readable name shown in the operator console
string
effect_action
Registered action to fire (for apply_action)
string
effect_function
Read-only function to invoke (for call_function)
string
effect_kind
required
Effect fired when the condition is met
string
Allowed values: apply_action call_function send_notification
effect_notification_template
Templated notification body/target (for send_notification, JSON)
effect_params_template
Template mapping triggering-object fields → effect input (JSON)
object
key
additional properties
any
event_type_ref
Named domain event watched (required for event_named)
string
execution_mode
Per-object vs batch effect firing (default per_object)
string
Allowed values: per_object batch
max_cascade_depth
Loop guard: max trigger-chain depth before suppression (default 3)
integer
modified_property_watch
Property api-names whose change trips object_set_modified (JSON array)
object_set_filter
Search-filter predicate defining the watched object set (JSON)
object_type_ref
Watched object type (required for object_set_* kinds)
string
requires_approval
Route the effect through a 0020 approval_gate instead of applying
boolean
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.