Skip to content
Esc
↑↓navigate↵open⌘Jpreview

Add a note

Creates a user note. data is a TipTap document (type: "doc"). See UserNoteData for supported block types (paragraph, heading, lists, task lists, etc.) and inline marks (bold, italic, link, …). Idempotent via Idempotency-Key header. Scoped to your integration’s institution via Basic Auth credentials.

POST/users/{id}/notes
Authorization
AuthorizationBasic auth · headerrequired

Basic Auth with clientId as username and clientSecret as password

Path parameters
idstringrequired
Header parameters
Idempotency-Keystringrequired

Unique key to prevent duplicate side effects; replay returns the original response

Request body
requiredapplication/json
noteNamestringrequired
dataUserNoteDatarequired

TipTap/ProseMirror JSON document stored in data. Root type must be "doc". The Fuxam dashboard user-notes editor uses the formatted-textarea stack (StarterKit + lists, task lists, alignment, colors, links, etc.). The API stores valid TipTap JSON as-is; nodes the dashboard cannot render may be preserved but not editable in the UI.

Show properties
typestringrequired

Root document type. Only "doc" is supported.

Allowed:doc
contentobject[]required

Top-level block nodes inside the document. Supported block type values:

  • paragraph — plain text block; may include attrs.textAlign (left, center, right, justify) and inline text / hardBreak children.
  • heading — heading block; set attrs.level to 1, 2, or 3 (dashboard headings).
  • bulletList / orderedList — lists containing listItem nodes.
  • listItem — list row; usually wraps one or more paragraph nodes.
  • taskList / taskItem — checklist; taskItem supports attrs.checked (true / false).
  • blockquote — quoted paragraph(s).
  • horizontalRule — divider line (no content).

Not exposed in the dashboard notes slash menu (avoid via API unless you accept limited UI support): codeBlock, image, file, table, youtube, columns.

Show properties
Array of object
typestringrequired

Block node type. See content array description for supported values.

attrsobject | null

Block attributes. Common keys: textAlign on paragraph/heading; level (1–3) on heading; checked on taskItem.

Show properties
classstring | null
textAlignstring | null
Allowed:leftcenterrightjustify
levelinteger | null

Heading level (heading blocks only).

min 1 · max 6
checkedboolean | null

Checked state (taskItem blocks only).

contentobject[]

Child nodes. For paragraph/heading: inline text and hardBreak. For lists: listItem or taskItem. For listItem/taskItem: usually nested paragraph blocks.

Show properties
Array of object
typestringrequired

Inline node text (with optional marks) or block hardBreak. List blocks nest listItem / taskItem here.

textstring

Plain text (type: "text" only).

marksobject[]

Inline formatting on a text node. Supported mark type values: bold, italic, strike, code, underline, highlight, subscript, superscript, link (attrs.href), textStyle (attrs.color, attrs.fontSize).

Show properties
Array of object
typestringrequired
attrsobject
Examples
{
  "noteName": "Onboarding notes",
  "data": {
    "type": "doc",
    "content": [
      {
        "type": "paragraph",
        "content": [
          {
            "type": "text",
            "text": "Student prefers morning sessions."
          }
        ]
      }
    ]
  }
}
Responses
201

Note added

dataUserNoterequired
Show properties
idstringrequired
noteNamestringrequired
dataUserNoteDatarequired

TipTap/ProseMirror JSON document stored in data. Root type must be "doc". The Fuxam dashboard user-notes editor uses the formatted-textarea stack (StarterKit + lists, task lists, alignment, colors, links, etc.). The API stores valid TipTap JSON as-is; nodes the dashboard cannot render may be preserved but not editable in the UI.

Show properties
typestringrequired

Root document type. Only "doc" is supported.

Allowed:doc
contentobject[]required

Top-level block nodes inside the document. Supported block type values:

  • paragraph — plain text block; may include attrs.textAlign (left, center, right, justify) and inline text / hardBreak children.
  • heading — heading block; set attrs.level to 1, 2, or 3 (dashboard headings).
  • bulletList / orderedList — lists containing listItem nodes.
  • listItem — list row; usually wraps one or more paragraph nodes.
  • taskList / taskItem — checklist; taskItem supports attrs.checked (true / false).
  • blockquote — quoted paragraph(s).
  • horizontalRule — divider line (no content).

Not exposed in the dashboard notes slash menu (avoid via API unless you accept limited UI support): codeBlock, image, file, table, youtube, columns.

Show properties
Array of object
typestringrequired

Block node type. See content array description for supported values.

attrsobject | null

Block attributes. Common keys: textAlign on paragraph/heading; level (1–3) on heading; checked on taskItem.

Show properties
classstring | null
textAlignstring | null
Allowed:leftcenterrightjustify
levelinteger | null

Heading level (heading blocks only).

min 1 · max 6
checkedboolean | null

Checked state (taskItem blocks only).

contentobject[]

Child nodes. For paragraph/heading: inline text and hardBreak. For lists: listItem or taskItem. For listItem/taskItem: usually nested paragraph blocks.

Show properties
Array of object
typestringrequired

Inline node text (with optional marks) or block hardBreak. List blocks nest listItem / taskItem here.

textstring

Plain text (type: "text" only).

marksobject[]

Inline formatting on a text node. Supported mark type values: bold, italic, strike, code, underline, highlight, subscript, superscript, link (attrs.href), textStyle (attrs.color, attrs.fontSize).

Show properties
Array of object
typestringrequired
attrsobject
creatorNamestringrequired
createdAtstring<date-time>required
updatedAtstring<date-time>required
metaResponseMetarequired
Show properties
requestIdstringrequired
timestampstring<date-time>required
versionstringrequired
Allowed:v4
watermarkstring<date-time>

Present on GET /users?updatedSince= pages. Taken at the first page minus a 60s overlap. Bound into pagination.next_cursor. Use it as the next updatedSince after deduping by user id. Delivery is inclusive >= and at-least-once.

400

Bad Request

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
401

Unauthorized

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
404

Not Found

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
409

Conflict — duplicate email or membership code (body includes existingUserId when known), a time-tracking session that is already running (activeSession), a time-tracking interval that overlaps an existing log (conflictingLog), idempotency key reused with a different body (idempotency_key_reused), or concurrent request with the same key still in progress (idempotency_key_in_progress)

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
429

Too Many Requests — 1000 requests per minute per institution. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (ISO-8601), and Retry-After (seconds).

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
500

Internal Server Error

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
503

Service unavailable — idempotency store temporarily unreachable, or the database is busy (lock wait, transaction timeout, or exhausted serialization/deadlock retries). Database contention includes Retry-After: 1. The idempotency key is released. Retry the same key (service_unavailable).

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
Try it
Server
Authorization
Parameters
Bodyapplication/json
Request
curl -X POST 'https://fuxam.app/api/v4/users/string/notes' \
  -H 'Authorization: Basic YOUR_CREDENTIALS' \
  -H 'Idempotency-Key: string' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "noteName": "Onboarding notes",
  "data": {
    "type": "doc",
    "content": [
      {
        "type": "paragraph",
        "content": [
          {
            "type": "text",
            "text": "Student prefers morning sessions."
          }
        ]
      }
    ]
  }
}'
Response
{
  "data": {
    "id": "string",
    "noteName": "string",
    "data": {
      "type": "doc",
      "content": [
        {
          "type": "heading",
          "attrs": {
            "level": 2,
            "textAlign": "left"
          },
          "content": [
            {
              "type": "text",
              "text": "Onboarding"
            }
          ]
        },
        {
          "type": "paragraph",
          "attrs": {
            "textAlign": "left"
          },
          "content": [
            {
              "type": "text",
              "text": "Prefers "
            },
            {
              "type": "text",
              "marks": [
                {
                  "type": "bold"
                }
              ],
              "text": "morning"
            },
            {
              "type": "text",
              "text": " sessions."
            }
          ]
        },
        {
          "type": "bulletList",
          "content": [
            {
              "type": "listItem",
              "content": [
                {
                  "type": "paragraph",
                  "content": [
                    {
                      "type": "text",
                      "text": "Bring laptop"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "creatorName": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z"
  },
  "meta": {
    "requestId": "req_1234567890_abc",
    "timestamp": "2026-06-02T07:00:00.000Z",
    "version": "v4",
    "watermark": "2019-08-24T14:15:22Z"
  }
}

Was this page helpful?