# NewPolicyValueRecordInput

input type

Create-input for a PolicyValueRecord. The tenant (org group) is derived SERVER-SIDE from the principal; the LEVEL is named by the anchor field: organizationId = an org-level value, logicalFacilityId = an LF override — EXACTLY ONE (no group level exists; the registry default is the floor above org). The anchor is tenant-scoped server-side and must be ACTIVE; the key must be registry-defined and the value inside its bounds; startAt is optional (absent = effective NOW, server-stamped; explicit values must be >= the server now — no past starts) and must precede endAt.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | Optional: when omitted the per-type default applies — the window coordinate `<key> = <valueInt> from <startAt>`; when supplied it must be non-blank. |
| `organizationId` | [ID](/types/#scalars) | no | The org anchor for an ORG-level value — tenant-scoped server-side; exactly one of the two anchors. |
| `logicalFacilityId` | [ID](/types/#scalars) | no | The LF anchor for an LF-level override — tenant-scoped server-side; never together with organizationId. |
| `key` | [String](/types/#scalars) `String!` | yes | The registry key — an unknown key refuses naming the roster. |
| `valueInt` | [Int](/types/#scalars) `Int!` | yes | The value — INT, registry-bounded per key (the v1 thresholds take 1..100). |
| `startAt` | [String](/types/#scalars) | no | The window start (INCLUSIVE; UTC ISO-8601). Optional — absent = effective NOW (server-stamped); explicit values must be >= the server now (no past starts). |
| `endAt` | [String](/types/#scalars) `String!` | yes | The window end (EXCLUSIVE; UTC ISO-8601). ALWAYS required (far-future = the standing value); must be strictly after startAt. |

## Used by

- [createPolicyValueRecord](/reference/policy-value-record/createPolicyValueRecord/)
