# NewContactAssignmentInput

input type

Create-input for a ContactAssignment. The tenant (org group) is derived SERVER-SIDE from the principal; hostId (the parent — rides the header) and contactId are tenant-scoped server-side and must BOTH be ACTIVE (STRICT); the resolved host must actually BE the named hostType; role↔host applicability is checked at the boundary (the ContactRole registry data).

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | Optional: when omitted the per-type default applies — the role's registry caption (e.g. 'Billing (AP)'); when supplied it must be non-blank. |
| `hostId` | [ID](/types/#scalars) `ID!` | yes | The HOST construct id. |
| `hostType` | [ContactAssignmentHostType](/types/ContactAssignmentHostType/) `ContactAssignmentHostType!` | yes | The host's construct class — verified against the resolved host server-side. |
| `contactId` | [ID](/types/#scalars) `ID!` | yes | The assigned Contact id — immutable after birth. |
| `role` | [String](/types/#scalars) `String!` | yes | The ContactRole token (canned registry — a non-canned or non-applicable role is VALIDATION/INVALID). |

## Used by

- [createContactAssignment](/reference/contact-assignment/createContactAssignment/)
