# NewNoteInput

input type

Append-input for addNote.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `targetConstructId` | [ID](/types/#scalars) `ID!` | yes | The annotated construct (ANY same-tenant type — existence + same-rootId gate; a cross-tenant/missing target refuses NOT_FOUND). |
| `targetType` | [String](/types/#scalars) `String!` | yes | The target's declared construct type (the ruling — constructs key by (type,id), so the existence read NEEDS the type and PROVES the declaration; a mismatch refuses NOT_FOUND opaquely; the TaskConstructRef law). |
| `body` | [String](/types/#scalars) `String!` | yes | The note body (1..4096). |
| `parentNoteId` | [ID](/types/#scalars) | no | No further notes. |
| `title` | [String](/types/#scalars) | no | The optional lead line (1..120). |
| `kind` | [String](/types/#scalars) | no | The kind ∈ {comment, question, action} — unnamed stamps 'comment' (the Task-priority idiom; server-validated). |
| `links` | [NoteLinkInput](/types/NoteLinkInput/) `[NoteLinkInput!]` | no | Outbound links (≤8 — the scheme fence). |
| `attachmentIds` | [ID](/types/#scalars) `[ID!]` | no | The caller's own PRIOR upload-mints to bind (≤8, distinct; each un-bound + on the SAME target — the attachment-first flow). |
| `refs` | [TaskConstructRefInput](/types/TaskConstructRefInput/) `[TaskConstructRefInput!]` | no | The construct refs (≤8, distinct by (type,id); in-tenant + non-doomed at write — the TaskConstructRef law). |
| `mentions` | [NoteMentionInput](/types/NoteMentionInput/) `[NoteMentionInput!]` | no | The mentions (≤8, distinct by target; userId ⊕ teamId each — the sendMessage recipient gates verbatim \[a USER in-tenant + non-doomed, suspended still receives; a TEAM must be ACTIVE with the CALLER a member]; each lands ONE inbox message in the birth txn). |
| `labelIds` | [ID](/types/#scalars) `[ID!]` | no | The labels (≤8, distinct — ACTIVE TaskLabels; the ONE shared vocabulary). |

## Used by

- [addNote](/reference/work-and-notes/addNote/)
