# 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](/types/#scalars) `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](/types/#scalars) `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](/types/#scalars) | no | The bound value (integer minor units) — REQUIRED for discount.apply (the EXACT-match fingerprint coordinate); refused for whole-target actions. |
| `tillSessionId` | [ID](/types/#scalars) | no | The OPEN TillSession the action runs in (the parent; XOR logicalFacilityId). |
| `logicalFacilityId` | [ID](/types/#scalars) | no | The ACTIVE LF the action runs at when no till session is involved (XOR tillSessionId). |
| `reason` | [String](/types/#scalars) `String!` | yes | Why the requester needs the override. |
| `caption` | [String](/types/#scalars) | no | Optional caption override. |

## Used by

- [requestApproval](/reference/gated-floor-actions/requestApproval/)
