Skip to content

What-if Book appointment (rollup delta)

POST
/v1/actions/hospitality.action.book_appointment/whatif
curl --request POST \
--url https://api.aerandil.com/v1/actions/hospitality.action.book_appointment/whatif \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "params": { "booked_at": "2026-04-15T12:00:00Z", "duration_minutes": 1, "external_record_reference_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "external_ref": "example", "guest_kind": "hotel_guest", "notes": "example", "outlet_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "person_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "price": { "amount": "example", "currency": "example" }, "provider_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "room_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "service_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "start_at": "2026-04-15T12:00:00Z" }, "return_modified": false }'

What-if projection of apply_hospitality_action_book_appointment — 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.book_appointment: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
booked_at
When the booking was taken — business time, not record time (defaults to now)
string format: date-time
duration_minutes
Duration override in minutes (skill-level / guest-specific duration)
integer
external_record_reference_id
Clinical-record reference (mandatory when the bound modality requires_medical_licensing)
string format: uuid
external_ref
Source-system key for replayed / connector-landed bookings
string
guest_kind
Who the client is to the property (in-house capture dimension)
string
Allowed values: hotel_guest member external
notes
Front-desk / therapist notes (may carry intake detail)
string
outlet_id
required
Outlet the appointment trades under
string format: uuid
person_id
Guest the appointment is for (optional — desk walk-ins may book anonymously)
string format: uuid
price
Price override (skill-level / yield pricing; defaults to the service's list price)
object
amount
required
string format: decimal
currency
required
string format: iso-4217
provider_id
Provider / therapist (optional — may be assigned later via reschedule)
string format: uuid
room_id
Treatment room (optional — may be assigned later via reschedule)
string format: uuid
service_id
required
Service being booked
string format: uuid
start_at
required
Treatment start
string format: date-time
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.