Libraries
velt-py
August 10, 2026
New Features
-
[REST API]: New agent filters on comment annotations.
getCommentAnnotationsacceptsagentId,executionId,agentType,agentSource,agentSuggestions, andagentCommentsto scope a listing to agent-authored annotations (supply at most one per request), anddeleteCommentAnnotationsacceptsagentId,agentUrls, andagentSuggestions, which combine so a crawl can delete “this agent’s still-pending suggestions for these pages” without affecting a concurrent batch. Agent filtering requires advanced queries on your workspace; when unavailable the API fails closed rather than widening to a document-wide delete. Also addsorder,statusId,resolvedBy,mentionedUserIds,includeMetadata, andincludePageInforead filters. Learn more → -
[REST API]: New per-execution agent options.
runExecutionacceptsdeviceType('mobile'or'desktop', defaults to desktop) to choose the emulated device,annotationVisibility('public'or'private', defaults to private) to control who can see the annotations the run creates, and anaiConfigoverride dict (provider,model,defaultModels,maxToolTurns) to pin the model for a single run. Learn more → -
[REST API]: New
filtersongetDocumentsCount. Accepts the same list of{key, operator, value}dicts asgetDocuments(up to 10; keys auto-prefixed withmetadata.unless already prefixed). Cannot be combined withexcludeFolderDocs. When filters are sent the response includesfiltersApplied— aFalsevalue means the filtered aggregate failed andcountis an unfiltered fallback. Learn more → -
[REST API]: New
includeRulesonsearchKnowledge. Set it toTrueto additionally search the workspace’s extracted-rules corpus and merge those hits with knowledge-chunk results; each result then carries akindof'chunk'or'rule', and rule hits also carryruleIdand an optionalcategory. Omitting it returns the previous chunk-only shape, andlimitbecomes the combined cap across both corpora. Learn more → -
[REST API]: New
purgeflag on the workflow delete-definition request hard-deletes a definition and its version snapshots instead of leaving a tombstone. Both paths free the definition ID for re-creation. Workflow definitions also document the notification-node, scheduled-trigger, and installable-app-trigger (GitHub App / Vercel Integration, including payload filters) shapes accepted insidenodesandtriggers. Learn more → -
[REST API]: New
nameandpermissionsparameters ongetAuthToken, alongside the existingisAdmin. Adds provisioning fields toCreateApiKeyRequest(persistenceDBRegion,realtimeDBRegion,isSuperWorkspace,platform,workspaceId,enablePrivateComments,requireAutoOrgUser,useNotificationService,setDefaultEmailTriggers,setDefaultNotificationTriggers) andexpiresInMstoCreateWorkspaceRequest. Learn more → -
[REST API]: New fields across several services —
veltUserIds,veltAllOrganizations, anduniqueIdon get-all-user-data;skipResourceExistenceValidationon get-permissions;pageSize,pageToken, androotFoldersOnlyon folders;displayBodyMessageTemplate,displayBodyMessageTemplateData,isCrossOrganizationEnabled,metadata,notifyUsers, andlocationon notifications;typeandisServerIdson get-CRDT-data;mergeandorderByCommentViewson documents. Learn more → -
[Self Hosting]: New
resolveUserIdsByEmailresolver onUserService, with aResolveUserIdsByEmailRequestmodel. Resolves a list of email addresses to an{email: userId}map, honouring customuser_schemafield mappings. Repeated emails are de-duplicated and blank orNoneentries are dropped; addresses that do not match are simply absent from the returned map. Learn more →
Improvements
- [REST API]: The deprecated
loopsfield on workflow definition requests can no longer break a request. Loop regions are no longer part of the workflow definition contract, and the API rejects any definition that carries them, soloopsis now stripped from the payload before send — a request that sets it succeeds instead of failing. Setting it to a non-Nonevalue raises aDeprecationWarningso the value is not dropped silently; leaving it unset (or explicitlyNone) is completely silent. Express loops as edges instead: anon: 'reject'back-edge carrying aloopobject, for example{"from": "review", "to": "draft", "on": "reject", "loop": {"maxIterations": 3}}. Learn more →
June 19, 2026
New Features
-
[Self Hosting]: New pluggable, fail-closed
sdk.selfHosting.verifyTokenhelper authenticates the credential the Velt frontend forwards to endpoint-based self-hosting resolvers. Opt in via aresolver_authconfig block; it supports a built-in JWT/JWKS verifier (HS256/RS256/ES256 with algorithm pinning, HTTPS-only JWKS, claim enforcement, leeway, opt-inexprequirement) and a custom-callback escape hatch. It returns a structuredVerifyTokenResultand never raises for a verification outcome. Adds the optionalvelt-py[auth]extra (PyJWT>=2.8.0, cryptography>=42.0.0) and new exportsVerifyTokenResultandResolverAuthService. Learn more → -
[Self Hosting]: New 14-member
CommentResolverSaveEvent(str, Enum)covers additional comment-resolver save events (status change, priority change, assign, approve, comment-level reactions, subscribe/unsubscribe, and more) the frontend can opt into sending viaResolverConfig.additionalSaveEvents.SaveCommentResolverRequest.eventis widened toOptional[Union[ResolverActions, CommentResolverSaveEvent, str]]and stays fully additive — every existingResolverActionsvalue still parses to the same member. Exported fromvelt_pyandvelt_py.models. Learn more → -
[Self Hosting]: New optional
SaveCommentResolverRequest.targetComment: Optional[PartialComment]field carries the comment the action occurred on (resolved by the frontend fromcommentId).from_dictparses it fail-open; it is request context for your handler only andsaveCommentsnever persists it. Learn more →
June 16, 2026
Bug Fixes
-
[Self Hosting]: Legacy reaction documents stored under the old
userkey are read transparently.from_dict()accepts eitherfromor the legacyuserkey (fromwins when both are present) and populatesfrom_, whileto_dict()always emitsfrom. No data migration is needed. Learn more → -
[Self Hosting]: The self-hosting package now exports all wired services.
RecorderService,NotificationService, andActivityServiceare now importable fromvelt_py.services.self_hostingand listed in its__all__. Learn more →
June 16, 2026
New Features
-
[REST API]: New
agentsservice (sdk.api.agents) for managing AI agents, versions, executions, prompt tooling, and agent groups (24 methods). Learn more → -
[REST API]: New
memoryservice (sdk.api.memory) for semantic search, judgments, knowledge ingestion, reviewer profiles/patterns/stats, and alerts (24 methods). Learn more → -
[REST API]: New
workflowservice (sdk.api.workflow) for Approval Engine / workflow orchestration, covering definitions, executions, lifecycle events, and step resolution (14 methods). Learn more → -
[REST API]:
usersservice additions for user invitations (invite/respond/list), counts, and document-user queries;getUsersgains optionalincludeInvolvedDocumentsandsearchKeyfilters. Learn more → -
[REST API]:
documentsservice addsgetDocumentsCount, which can optionally exclude folder documents or scope the count to a specific folder. Learn more → -
[REST API]:
crdtservice addsdeleteCrdtData, which targets specificeditorIdsor deletes all editors for a document when omitted. Learn more → -
[REST API]:
workspaceservice adds 19 new methods covering domain requests, API key configuration/copy, notification/permission-provider/activity configs, and advanced (Svix) webhook endpoint management. Learn more →
Improvements
- [REST API]: New opt-in
filter_unknown_fieldskeyword (defaultFalse) on the add/update methods ofcommentAnnotations,activities, andnotificationsfilters request entity collections to only the fields the Velt API accepts, dropping unknown top-level custom keys. It applies to top-level fields only (nested open-typed fields pass through whole) and fails open, never blocking a write. Backed by a newvelt_py.models.field_allowlistsmodule.
Bug Fixes
- [REST API]:
sdk.api.workspace.getApiKeyMetadatanow targets the canonical/v2/workspace/apikeyconfig/getendpoint (previously/v2/workspace/apikeymetadata/get, which remains a legacy alias). No call-site change is required — the method signature is unchanged.
May 19, 2026
New Features
-
[Self Hosting]:
PartialCommentAnnotationnow exposesfrom(comment author),assignedTo,targetTextRange, andresolvedByUserIdas first-class typed fields. These four keys previously fell through silently viaextra_fields. Learn more → -
[Self Hosting]: New
PartialTargetTextRangedataclass (exported fromvelt_py.models) represents the selected text snippet a comment annotation is anchored to. Learn more →
Improvements
-
[Self Hosting]:
BaseMetadatanow modelssdkVersionanddocumentMetadata, which were previously dropped silently; self-hosted Mongo writes now preserve both fields. -
[Self Hosting]: Introduced an
UNSETsentinel onresolvedByUserIdto distinguish “field absent from payload” (no Mongo write) from “explicit null” (the frontend’s unresolve action — writes null to Mongo).
Bug Fixes
None.April 20, 2026
New Features
-
[REST API Backend]: The
sdk.api.*namespace is now available, introducing a REST API backend for the Python SDK with feature parity with the Velt Node SDK. Learn more → -
[REST API Services]: 17 services are included:
organizations,folders,documents,users,userGroups,notifications,commentAnnotations,activities,accessControl,crdt,presence,livestate,recordings,rewriter,gdpr,workspace, andtoken. -
[Typed Request Dataclasses]: Every
sdk.api.*method accepts a typed@dataclassrequest object (e.g.,AddOrganizationsRequest) and returns the raw Velt API response without local reshaping or validation. -
[camelCase Method Names]: All
sdk.api.*method names are camelCase and match the JavaScript/Node SDK one-to-one. -
[Custom Error Classes]: Three new error classes are available:
VeltValidationError,VeltTokenError, andVeltApiError, all extending the baseVeltSDKError. -
[Environment Variable Support]: The SDK reads
VELT_API_KEY,VELT_AUTH_TOKEN,VELT_WORKSPACE_ID, andVELT_WORKSPACE_AUTH_TOKENfrom the environment for credential configuration. -
[PyPI Distribution]: The package is published to PyPI as
velt-py. Requires Python 3.8+; therequestslibrary is installed automatically as a dependency.

