Skip to main content

Error codes

General (400 / 403 / 404 / 409)

CodeErrorMeaning
400bad_requestInvalid request.
400fields_must_be_dictFields must be an object (dict).
400invalid_limitLimit must be 1–5000 or omitted (default 1000).
400invalid_offsetOffset must be non-negative integer.
403forbiddenYou don’t have permission.
403no_permissionYou do not have permission for this operation.
404batch_not_foundHistory batch not found.
404batch_not_found_or_closedHistory batch not found or already closed.
404batch_emptyHistory batch not found or empty.
409version_conflictEntity modified concurrently. Reload & retry.
409invalid_order_conflictOperation order conflict, please retry.
409batch_id_conflictBatch ID already exists with different metadata.

Node Errors

CodeErrorMeaning
400invalid_node_idNode id must be UUID v4.
404node_not_foundNode not found.
400immutable_fieldTried to modify immutable field.
400no_fields_to_updateUpdate must include at least one mutable field (besides id).
400title_too_longTitle too long (max 80 chars).
400description_too_longDescription too long (max 400 chars).
400invalid_statusInvalid node status.
400status_blockedStatus=2 (Blocked) is auto-generated, forbidden to set manually.
400node_blockedCan't change status for blocked node (status=2).
400invalid_due_datetimedueDate must be ISO8601 (e.g. 2025-09-13T10:00:00Z).
400already_trashed_nodeNode already in trash.
400node_in_trashCan't edit node in trash.
400not_trashed_nodeNode is not in trash.
400cant_delete_active_nodeCannot delete active node — move to trash first.
400cannot_restore_purgedCannot restore permanently deleted node.
403expand_readonly_branchCannot expand read-only branch. Create node without tgt_id then attach via secondary link.
400invalid_priorityPriority must be int 0–9.
400invalid_volumeVolume must be int 0–9.
400volume_out_of_rangeVolume must be 0–9.
400invalid_independentindependent must be boolean.
400invalid_pinnedpinned must be boolean.
400invalid_collapsedcollapsed must be boolean.
400invalid_assigneeAssignee must be list of usernames/strings.
400too_many_tagsToo many tags (max length 32).
400invalid_tagstags must be array of non-empty strings.
400tag_emptyTags cannot contain empty/whitespace strings.
400tag_too_longEach tag ≤ 50 chars.
400invalid_public_dueField 'due' must be a valid ISO8601 datetime string (e.g. 2025-09-13T10:00:00Z) and represent future time.

CodeErrorMeaning
400invalid_link_idLink id must be UUID v4.
404link_not_foundLink not found.
404source_not_foundSource node not found.
404target_not_foundTarget node not found.
400source_in_trashSource node in trash.
400target_in_trashTarget node in trash.
400inactive_source_or_targetSource/target inactive (trashed/missing).
400self_link_not_allowedNode cannot link to itself.
400invalid_source_target_idsource and target must be UUID v4.
400invalid_target_idtarget must be UUID v4 or omitted.
400invalid_link_snapshotLink snapshot invalid.
400invalid_link_privateprivate must be boolean or omitted.
403forbidden_typeLink type forbidden at your ACL level.
403forbidden_privateGlobal link forbidden with your access. See privacy rules.
400invalid_or_duplicate_linkLink already exists or snapshot invalid.
409duplicate_linkLink already exists.
409duplicate_reversed_linkReverse link already exists.
400already_trashed_linkLink already in trash.
400link_in_trashCan't edit link in trash.
400not_trashed_linkLink not in trash.

Access / Grants

CodeErrorMeaning
400grant_snapshot_invalidGrant snapshot must include NodeID + GrantedTo.
400scope_id_requiredScope ID required.
404scope_id_not_foundScope node not found.
400scope_user_mismatchFor STYPE_USER, scope_id must equal user_id.
403no_access_to_scope_branchYou don’t have access to this branch.
400branch_not_foundPublic branch not found.
400not_embeddedPublic node is not embedded.
400already_embeddedPublic branch is already embedded.
400already_publicThe branch is already public.
400user_not_foundUser not found.
400api_not_allowedUser does not allowed API usage.
400has_accessCan't embed branch with active access granted.
400invalid_branch_valueField 'branch' must be bool (true/false) or omitted.
400not_publicThis node is not public.
400public_expiredPublication expired.
400missing_emailField 'email' is required.
400already_grantedUser already granted. Use update method to change access.
400invalid_dueField 'due' must be a valid ISO8601 datetime string (e.g. 2025-09-13T10:00:00Z).
400invalid_levelLevel must be int between 1 and 3.
400invalid_emailInvalid email.
400cannot_share_with_selfYou trying to share node with yourself.
400not_sharedThere are no access granted to the user with this node.

Files / Attachments

CodeErrorMeaning
400file_requiredNo file provided.
400file_size_unreadableFile size unreadable (stream invalid).
400invalid_file_sizeInvalid size (must be >0 and ≤ plan limit).
500attachment_persist_failedFailed to persist attachment.
500attachment_delete_failedFailed to delete attachment.

System / Internal (500)

CodeErrorMeaning
500internal.exceptionUnexpected server failure.

info

Each error can be namespaced:
for example bad_request.invalid_uuid or forbidden.auth_missing.