RequestApprovalInput
input type
Request-input for requestApproval: a LIVE gated action + its target + the parent coordinate (tillSessionId XOR logicalFacilityId) + the REQUIRED reason. requiredTier/expiresAt derive SERVER-side; the fingerprint marker mints in the create transaction (ONE live request per (target, action) — a duplicate refuses CONFLICT/REFERENCED naming the holder).
Fields
| Field | Type | Required | Notes |
|---|---|---|---|
action | String String! | yes | The gated action (dotted canonical name — registry; LIVE (the contracts LIVE_GATED_ACTIONS roster, verbatim): discount.apply | void.transaction | return.approve | no_sale | refund.routing_exception | credit.over_limit | order.below_minimum; a dormant action refuses VALIDATION/UNSUPPORTED naming its arrival). |
targetId | ID ID! | yes | The blocked action's target — the construct the action gates (the contracts GATED_ACTION_TARGETS: Order · Return · TillSession; tenant-scoped server-side); state-gated to WHERE the action's op fires (an un-voidable order, a closed till, an unreceived return refuse CONFLICT/REF_STATE — an approval never revives a window). |
valueMinor | Int | no | The bound value (integer minor units) — REQUIRED for discount.apply (the EXACT-match fingerprint coordinate); refused for whole-target actions. |
tillSessionId | ID | no | The OPEN TillSession the action runs in (the parent; XOR logicalFacilityId). |
logicalFacilityId | ID | no | The ACTIVE LF the action runs at when no till session is involved (XOR tillSessionId). |
reason | String String! | yes | Why the requester needs the override. |
caption | String | no | Optional caption override. |