Validate Recommend sell limit (dry-run)
const url = 'https://api.aerandil.com/v1/actions/hospitality.action.recommend_sell_limit/validate';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"branch":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","params":{"cadence":"nightly","confidence":"low","confidence_score":"example","end_date":"2026-04-15","expected_walks":"example","expires_at":"2026-04-15T12:00:00Z","expires_on":"2026-04-15","factors_considered":["pickup_pace"],"forecast_snapshot":{},"marginal_rate":{"amount":"example","currency":"example"},"oversell_limit":1,"rationale_text":"example","reset":true,"room_type_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","rooms_on_books":1,"run_id":"example","show_rate":"example","start_date":"2026-04-15","target_horizon_days":1,"walk_cost":{"amount":"example","currency":"example"}},"return_modified":false,"target":{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","object_type":"hospitality.property"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aerandil.com/v1/actions/hospitality.action.recommend_sell_limit/validate \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "params": { "cadence": "nightly", "confidence": "low", "confidence_score": "example", "end_date": "2026-04-15", "expected_walks": "example", "expires_at": "2026-04-15T12:00:00Z", "expires_on": "2026-04-15", "factors_considered": [ "pickup_pace" ], "forecast_snapshot": {}, "marginal_rate": { "amount": "example", "currency": "example" }, "oversell_limit": 1, "rationale_text": "example", "reset": true, "room_type_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "rooms_on_books": 1, "run_id": "example", "show_rate": "example", "start_date": "2026-04-15", "target_horizon_days": 1, "walk_cost": { "amount": "example", "currency": "example" } }, "return_modified": false, "target": { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "object_type": "hospitality.property" } }'Dry-run of apply_hospitality_action_recommend_sell_limit’s parameter checks. No side effects, no idempotency reservation, no handler dispatch — just the schema pass plus action-level shape (target presence, target type, unknown-parameter rejection). return_modified is meaningless here and ignored.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
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).
object
Guests expected to be walked on the first night at the limit
object
The nightly rate one more sale on the first night would earn
object
Recommended oversell headroom over the sellable rooms (rooms, at least 0); exclusive with reset
Recommend returning to the operator’s declared limit; exclusive with oversell_limit (defaults to false)
The room type whose availability ledger the limit would move
Rooms of the type on the books for the first night, at issue time
Share of the rooms on the books believed to arrive (0..=1)
What walking one arriving guest is believed to cost, past the night’s own revenue
object
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.
object
Responses
Section titled “Responses”Validation outcome. result is valid or invalid; per-parameter diagnostics are always populated for every declared parameter so a UI can render the action’s full surface.
object
Action-level errors not tied to a single parameter (missing target, target type mismatch, unknown parameter names). Absent when empty.
Per-parameter diagnostics keyed by api_name.
object
object
The serialised value the server interpreted, or null if the parameter was not supplied.
Example
{ "parameters": { "additionalProperty": { "result": "valid" } }, "result": "valid"}