V3Client
Quick-reference table
| Method | Description |
|---|---|
create_resource() | Upload a file and register it as a new resource. |
create_resource_revision() | Upload a new file revision for an existing resource. |
create_comment() | Upload a file and attach it as a comment on a resource. |
update_comment() | Replace an existing comment's file. |
get_content() | Download raw file bytes from a resource, revision, or comment. |
get_resource() | Retrieve a resource by ID. |
get_resource_revision() | Retrieve a specific revision of a resource. |
get_comment() | Retrieve a comment by ID. |
list_resources() | List resources with optional filters. |
list_resource_revisions() | List revisions for a resource. |
list_comments() | List comments on a resource. |
archive_resource() | Archive a resource. |
restore_resource() | Restore an archived resource. |
archive_comment() | Archive a comment. |
restore_comment() | Restore an archived comment. |
create_revision_relationship() | Create a typed relationship between two revisions. |
list_revision_relationships() | List relationships for a revision. |
list_revision_relationship_types() | List available relationship types. |
create_receiving_remote() | Create a receiving remote connection. |
create_sending_remote() | Create a sending remote connection. |
get_receiving_remote() | Retrieve a receiving remote by ID. |
get_sending_remote() | Retrieve a sending remote by ID. |
list_receiving_remotes() | List receiving remote connections. |
list_sending_remotes() | List sending remote connections. |
update_receiving_remote() | Update a receiving remote connection. |
update_sending_remote() | Update a sending remote connection. |
list_shareable_sending_connections() | List the Secure Connections a resource may be shared to. |
share_file_to_sending_remote() | Share a resource with a partner over a Secure Connection. |
revoke_file_from_sending_remote() | Stop sharing a resource over a Secure Connection. |
list_sending_remote_shares_for_resource() | List the Secure Connections a resource is shared to. |
Other V3Client domains:
- Connected sources — observe a third-party system, browse it, and connect a file or container.
- Notifications — inbox and poll.
- AI chat — conversations, steering, and LLM endpoints.
- Search and favorites — search, suggestions, and starred systems and resources.
Workflow logs, revision property updates, Secure Connection governance, and object stores are on this page below.
Upload
create_resource
V3Client.create_resource(
path,
resource_type,
*,
description=None,
version_name=None,
external_identifier=None,
display_name=None,
upstream_remote_info=None,
) -> ResourceDto
Upload a local file and register it as a new resource. The resource_type determines how the resource is classified. V3Client handles file tokenisation and storage automatically — pass a plain filesystem path.
Required parameters
| Name | Type | Description |
|---|---|---|
path | PathLike | Filesystem path to the file to upload. |
resource_type | ResourceTypeDto | Classification: model, artifact, file, connected_container, or connected_resource. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
description | str | None | None | Text describing the resource's purpose or contents. |
version_name | str | None | None | User-defined version label (e.g. "v2.1.0"). |
external_identifier | str | None | None | Identifier from an external system for cross-referencing. |
display_name | str | None | None | Human-readable name for the resource. |
upstream_remote_info | UpstreamInfoCreateDto | None | None | Provenance when the remote sync service imports this resource over a receiving connection. Leave unset for a file you upload. |
UpstreamInfoCreateDto requires every field together: upstream_remote_id, upstream_file_id, upstream_file_created, upstream_file_revision_id, and upstream_file_revision_created.
Returns: ResourceDto — the newly created resource.
- Basic
- Full example
from istari_digital_client.v3.models.resource_type_dto import ResourceTypeDto
resource = client.create_resource(
path="model.onnx",
resource_type=ResourceTypeDto.MODEL,
)
print(resource.resource_id)
from istari_digital_client.v3.models.resource_type_dto import ResourceTypeDto
resource = client.create_resource(
path="wing-stress-v3.stl",
resource_type=ResourceTypeDto.MODEL,
display_name="Wing Stress Analysis v3",
description="FEA results for revised wing geometry",
version_name="v3.0.0",
external_identifier="WS-2024-003",
)
# Fetch and verify the uploaded content
data = client.get_content(resource)
print(f"Uploaded {len(data)} bytes as resource {resource.resource_id}")
create_resource_revision
V3Client.create_resource_revision(
resource_id,
path,
*,
description=None,
version_name=None,
external_identifier=None,
display_name=None,
upstream_revision_info=None,
) -> ResourceRevisionDto
Upload a new file and add it as a revision to an existing resource. Each call appends a new revision to the resource's history; previous revisions remain accessible.
Required parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource to add a revision to. |
path | PathLike | Filesystem path to the new file. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
description | str | None | None | Description for this revision. |
version_name | str | None | None | Version label for this revision. |
external_identifier | str | None | None | External system identifier. |
display_name | str | None | None | Human-readable name for this revision. |
upstream_revision_info | UpstreamRevisionInfoCreateDto | None | None | Provenance when the remote sync service imports this revision over a receiving connection. Leave unset for a revision you author locally. |
UpstreamRevisionInfoCreateDto requires every field together: receiving_connection_id, upstream_file_revision_id, and upstream_file_revision_created.
Returns: ResourceRevisionDto — the newly created revision.
- Basic
- Full example
revision = client.create_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
path="model-v2.onnx",
)
print(revision.file_revision_id)
revision = client.create_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
path="model-v2.onnx",
version_name="v2.0.0",
description="Retrained with extended dataset",
)
# Confirm it appears in the revision list
page = client.list_resource_revisions(
resource_id="550e8400-e29b-41d4-a716-446655440000",
version_name=["v2.0.0"],
)
assert page.items[0].file_revision_id == revision.file_revision_id
create_comment
V3Client.create_comment(
resource_id,
path,
parent_comment_id=None,
) -> CommentDto
Upload a local file and attach it as a comment on a resource. Supports threaded replies via parent_comment_id.
Required parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource to comment on. |
path | PathLike | Filesystem path to the comment file. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
parent_comment_id | str | None | None | ID of the parent comment to reply to. |
Returns: CommentDto — the newly created comment.
- Basic
- Full example
comment = client.create_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
path="review-notes.pdf",
)
print(comment.id)
# Top-level comment, then a threaded reply
comment = client.create_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
path="initial-review.pdf",
)
reply = client.create_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
path="follow-up.pdf",
parent_comment_id=comment.id,
)
print(reply.parent_comment_id == comment.id)
update_comment
V3Client.update_comment(
resource_id,
comment_id,
path,
) -> CommentDto
Replace an existing comment's content by uploading a new file. The previous file is retained in history.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the parent resource. |
comment_id | str | Unique identifier of the comment to update. |
path | PathLike | Filesystem path to the replacement comment file. |
Returns: CommentDto — the updated comment.
- Basic
- Full example
updated = client.update_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
path="corrected-review.pdf",
)
page = client.list_comments(resource_id="550e8400-e29b-41d4-a716-446655440000")
first_comment = page.items[0]
updated = client.update_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id=first_comment.id,
path="revised-notes.pdf",
)
data = client.get_content(updated)
print(f"Updated comment content: {len(data)} bytes")
Retrieve
get_content
V3Client.get_content(
resource,
) -> bytes
Fetch and return the raw file content bytes for a resource, resource revision, or comment. The object must have a content_token attribute set.
Pass the object returned by get_resource(), get_resource_revision(), or get_comment() directly — no need to extract the token manually.
Parameters
| Name | Type | Description |
|---|---|---|
resource | ResourceDto | ResourceRevisionDto | CommentDto | Object whose content to download. Must have a content_token. |
Returns: bytes — raw file content.
- Basic
- Full example
resource = client.get_resource("550e8400-e29b-41d4-a716-446655440000")
data = client.get_content(resource)
with open("downloaded.onnx", "wb") as f:
f.write(data)
page = client.list_resource_revisions(
resource_id="550e8400-e29b-41d4-a716-446655440000",
version_name=["v1.0.0"],
)
revision = client.get_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
revision_id=page.items[0].file_revision_id,
)
data = client.get_content(revision)
print(f"Downloaded {len(data)} bytes for revision {revision.file_revision_id}")
get_resource
V3Client.get_resource(
resource_id,
) -> ResourceDto
Retrieve a resource by its unique identifier.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource to retrieve. |
Returns: ResourceDto — the resource.
- Basic
- Full example
resource = client.get_resource("550e8400-e29b-41d4-a716-446655440000")
print(resource.resource_type)
resource = client.get_resource("550e8400-e29b-41d4-a716-446655440000")
data = client.get_content(resource)
print(f"Resource {resource.resource_id} ({resource.resource_type}): {len(data)} bytes")
get_resource_revision
V3Client.get_resource_revision(
resource_id,
revision_id,
) -> ResourceRevisionDto
Retrieve a specific revision of a resource.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the parent resource. |
revision_id | str | Unique identifier of the revision to retrieve. |
Returns: ResourceRevisionDto — the revision.
- Basic
- Full example
revision = client.get_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
revision_id="aabb1234-...",
)
print(revision.version_name)
page = client.list_resource_revisions(
resource_id="550e8400-e29b-41d4-a716-446655440000",
version_name=["v1.0.0"],
)
revision = client.get_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
revision_id=page.items[0].file_revision_id,
)
data = client.get_content(revision)
get_comment
V3Client.get_comment(
resource_id,
comment_id,
) -> CommentDto
Retrieve a comment by its ID.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the parent resource. |
comment_id | str | Unique identifier of the comment to retrieve. |
Returns: CommentDto — the comment.
- Basic
- Full example
comment = client.get_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
)
data = client.get_content(comment)
comment = client.get_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
)
content = client.get_content(comment)
with open("comment-attachment.pdf", "wb") as f:
f.write(content)
List
list_resources
V3Client.list_resources(
*,
cursor=None,
size=None,
include_total=None,
resource_id=None,
created_by_id=None,
name=None,
type_name=None,
description=None,
version_name=None,
external_identifier=None,
display_name=None,
mime_type=None,
archive_status=None,
) -> CursorPageResourceDto
List resources with optional filters. Results are cursor-paginated; pass the cursor field from the previous page to fetch the next.
Most filter parameters accept a list and support a ! prefix for negation (e.g. type_name=["!artifact"] excludes artifacts).
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor from the previous response. |
size | int | None | None | Page size (0–100, default 10). |
include_total | bool | None | None | Include total item count in the response. |
resource_id | list[str] | None | None | Filter by resource ID(s). Supports ! negation. |
created_by_id | list[str] | None | None | Filter by creator user ID(s). |
name | list[str] | None | None | Filter by filename (exact match). |
type_name | list[str] | None | None | Filter by ResourceTypeDto: model, artifact, file, connected_container, connected_resource. |
description | list[str] | None | None | Filter by description (exact match). |
version_name | list[str] | None | None | Filter by version label. |
external_identifier | list[str] | None | None | Filter by external identifier. |
display_name | list[str] | None | None | Filter by display name (exact match). |
mime_type | list[str] | None | None | Filter by MIME type (e.g. model/stl). |
archive_status | ArchiveStatus | None | None | active (default), archived, or all. |
Returns: CursorPageResourceDto — paginated list of resources.
- Basic
- Full example
page = client.list_resources(type_name=["model"], size=20)
for r in page.items:
print(r.id, r.resource_type)
# Paginate through all non-archived models. Pages expose the next cursor as `next_page`.
cursor = None
while True:
page = client.list_resources(
type_name=["model"],
size=50,
cursor=cursor,
)
for r in page.items:
print(r.id)
cursor = page.next_page
if not cursor:
break
list_resource_revisions
V3Client.list_resource_revisions(
resource_id,
*,
cursor=None,
size=None,
include_total=None,
file_revision_id=None,
created_by_id=None,
name=None,
description=None,
version_name=None,
external_identifier=None,
display_name=None,
mime_type=None,
) -> CursorPageResourceRevisionDto
List revisions for a resource. Results are cursor-paginated.
Required parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource whose revisions to list. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
file_revision_id | list[str] | None | None | Filter by revision ID(s). |
created_by_id | list[str] | None | None | Filter by creator user ID(s). |
name | list[str] | None | None | Filter by filename. |
description | list[str] | None | None | Filter by description. |
version_name | list[str] | None | None | Filter by version label. |
external_identifier | list[str] | None | None | Filter by external identifier. |
display_name | list[str] | None | None | Filter by display name. |
mime_type | list[str] | None | None | Filter by MIME type. |
Returns: CursorPageResourceRevisionDto — paginated list of revisions.
- Basic
- Full example
page = client.list_resource_revisions(
resource_id="550e8400-e29b-41d4-a716-446655440000",
size=10,
)
for rev in page.items:
print(rev.file_revision_id, rev.version_name)
page = client.list_resource_revisions(
resource_id="550e8400-e29b-41d4-a716-446655440000",
version_name=["v2.0.0"],
include_total=True,
)
print(f"Found {page.total} revision(s) matching v2.0.0")
if page.items:
rev = client.get_resource_revision(
resource_id="550e8400-e29b-41d4-a716-446655440000",
revision_id=page.items[0].file_revision_id,
)
data = client.get_content(rev)
list_comments
V3Client.list_comments(
resource_id,
*,
cursor=None,
size=None,
include_total=None,
comment_id=None,
created_by_id=None,
) -> CursorPageCommentDto
List comments on a resource. Results are cursor-paginated.
Required parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource whose comments to list. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
comment_id | list[str] | None | None | Filter by comment ID(s). Supports ! negation. |
created_by_id | list[str] | None | None | Filter by creator user ID(s). |
Returns: CursorPageCommentDto — paginated list of comments.
- Basic
- Full example
page = client.list_comments(
resource_id="550e8400-e29b-41d4-a716-446655440000",
)
for c in page.items:
print(c.id)
page = client.list_comments(
resource_id="550e8400-e29b-41d4-a716-446655440000",
include_total=True,
size=50,
)
print(f"{page.total} comments total")
for c in page.items:
data = client.get_content(c)
print(f" comment {c.id}: {len(data)} bytes")
Archive & Restore
archive_resource
V3Client.archive_resource(
resource_id,
) -> None
Archive a resource. Archived resources are excluded from default list queries unless archive_status="archived" or archive_status="all" is passed.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource to archive. |
Returns: None
- Basic
- Full example
client.archive_resource("550e8400-e29b-41d4-a716-446655440000")
resource = client.get_resource("550e8400-e29b-41d4-a716-446655440000")
client.archive_resource(resource.resource_id)
restored = client.restore_resource(resource.resource_id)
print(restored.resource_id)
restore_resource
V3Client.restore_resource(
resource_id,
) -> ResourceDto
Restore an archived resource, making it active again.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the resource to restore. |
Returns: ResourceDto — the restored resource.
- Basic
- Full example
resource = client.restore_resource("550e8400-e29b-41d4-a716-446655440000")
print(resource.resource_id)
archived = client.list_resources(archive_status="archived", type_name=["model"])
for r in archived.items:
client.restore_resource(r.id)
print(f"Restored {r.id}")
archive_comment
V3Client.archive_comment(
resource_id,
comment_id,
) -> CommentDto
Archive a comment on a resource.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the parent resource. |
comment_id | str | Unique identifier of the comment to archive. |
Returns: CommentDto — the archived comment.
- Basic
- Full example
client.archive_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
)
page = client.list_comments(resource_id="550e8400-e29b-41d4-a716-446655440000")
for c in page.items:
client.archive_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id=c.id,
)
restore_comment
V3Client.restore_comment(
resource_id,
comment_id,
) -> CommentDto
Restore an archived comment.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Unique identifier of the parent resource. |
comment_id | str | Unique identifier of the comment to restore. |
Returns: CommentDto — the restored comment.
- Basic
- Full example
comment = client.restore_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
)
comment = client.restore_comment(
resource_id="550e8400-e29b-41d4-a716-446655440000",
comment_id="aabb1234-...",
)
data = client.get_content(comment)
print(f"Restored comment: {len(data)} bytes")
Revision Relationships
create_revision_relationship
V3Client.create_revision_relationship(
new_revision_relationship_dto,
) -> RevisionRelationshipDto
Create a typed relationship between two revisions. Relationships record provenance, dependency, or lineage links between resource versions.
Parameters
| Name | Type | Description |
|---|---|---|
new_revision_relationship_dto | NewRevisionRelationshipDto | DTO with the left revision, right revision, and relationship type IDs. |
Returns: RevisionRelationshipDto — the created relationship.
- Basic
- Full example
from istari_digital_client.v3.models.new_revision_relationship_dto import NewRevisionRelationshipDto
rel = client.create_revision_relationship(
new_revision_relationship_dto=NewRevisionRelationshipDto(
left_revision_id="rev-aaa",
right_revision_id="rev-bbb",
relationship_type_id="type-ccc",
)
)
print(rel.id)
from istari_digital_client.v3.models.new_revision_relationship_dto import NewRevisionRelationshipDto
# Look up an available relationship type
types = client.list_revision_relationship_types()
rel_type_id = types.items[0].id
rel = client.create_revision_relationship(
new_revision_relationship_dto=NewRevisionRelationshipDto(
left_revision_id="rev-aaa",
right_revision_id="rev-bbb",
relationship_type_id=rel_type_id,
)
)
rels = client.list_revision_relationships(revision_id="rev-aaa")
print(f"{len(rels.items)} relationship(s) for rev-aaa")
list_revision_relationships
V3Client.list_revision_relationships(
revision_id,
*,
cursor=None,
size=None,
include_total=None,
left_revision_id=None,
right_revision_id=None,
owning_entity_type=None,
) -> CursorPageRevisionRelationshipDto
List relationships that the caller has access to for a given revision.
Required parameters
| Name | Type | Description |
|---|---|---|
revision_id | str | The revision ID to list relationships for. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
left_revision_id | list[str] | None | None | Filter by left revision ID(s). Use !uuid to negate. |
right_revision_id | list[str] | None | None | Filter by right revision ID(s). |
owning_entity_type | list[str] | None | None | Filter by entity type (e.g. model, artifact, file). |
Returns: CursorPageRevisionRelationshipDto — paginated list of relationships.
- Basic
- Full example
page = client.list_revision_relationships(revision_id="rev-aaa")
for r in page.items:
print(r.left_revision.file_revision_id, "->", r.right_revision.file_revision_id)
page = client.list_revision_relationships(
revision_id="rev-aaa",
owning_entity_type=["model"],
include_total=True,
)
print(f"{page.total} relationship(s) for this revision")
list_revision_relationship_types
V3Client.list_revision_relationship_types(
*,
cursor=None,
size=None,
include_total=None,
) -> CursorPageRevisionRelationshipTypeDto
List all available revision relationship types registered in the system.
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
Returns: CursorPageRevisionRelationshipTypeDto — paginated list of relationship types.
- Basic
- Full example
types = client.list_revision_relationship_types()
for t in types.items:
print(t.id, t.name)
types = client.list_revision_relationship_types(include_total=True)
print(f"{types.total} relationship types available")
type_id = types.items[0].id
Remote Connections
create_receiving_remote
V3Client.create_receiving_remote(
receiving_connection_create_dto,
) -> ReceivingConnectionDto
Create a receiving remote connection to accept resources pushed from another registry.
Parameters
| Name | Type | Description |
|---|---|---|
receiving_connection_create_dto | ReceivingConnectionCreateDto | DTO describing the new receiving connection. |
Returns: ReceivingConnectionDto — the created receiving remote.
- Basic
- Full example
from istari_digital_client.v3.models.receiving_connection_create_dto import ReceivingConnectionCreateDto
remote = client.create_receiving_remote(
receiving_connection_create_dto=ReceivingConnectionCreateDto(
label="upstream-registry",
description="Accept resources from the partner",
shared_id="upstream-registry",
shared_secret="shared-secret",
object_store_id="<object_store_id>",
),
)
print(remote.id)
from istari_digital_client.v3.models.receiving_connection_create_dto import ReceivingConnectionCreateDto
remote = client.create_receiving_remote(
receiving_connection_create_dto=ReceivingConnectionCreateDto(
label="partner-registry",
description="Accept resources from the partner",
shared_id="partner-registry",
shared_secret="shared-secret",
object_store_id="<object_store_id>",
),
)
retrieved = client.get_receiving_remote(remote.id)
print(retrieved.label)
create_sending_remote
V3Client.create_sending_remote(
sending_connection_create_dto,
) -> SendingConnectionDto
Create a sending remote connection to push resources to another registry.
SendingConnectionCreateDto.allow_reshare defaults to False. Set it to True to let the receiving organization share files that arrived over this connection onward over its own sending connections. False keeps those files on the receiving instance.
Parameters
| Name | Type | Description |
|---|---|---|
sending_connection_create_dto | SendingConnectionCreateDto | DTO describing the new sending connection. allow_reshare (bool, default False) controls whether the receiver may share files onward. |
Returns: SendingConnectionDto — the created sending remote, including allow_reshare.
- Basic
- Full example
from istari_digital_client.v3.models.sending_connection_create_dto import SendingConnectionCreateDto
remote = client.create_sending_remote(
sending_connection_create_dto=SendingConnectionCreateDto(
label="downstream-registry",
description="Send resources to the partner",
shared_id="downstream-registry",
shared_secret="shared-secret",
object_store_id="<object_store_id>",
),
)
print(remote.id)
from istari_digital_client.v3.models.sending_connection_create_dto import SendingConnectionCreateDto
remote = client.create_sending_remote(
sending_connection_create_dto=SendingConnectionCreateDto(
label="partner-registry",
description="Send resources to the partner",
shared_id="partner-registry",
shared_secret="shared-secret",
object_store_id="<object_store_id>",
allow_reshare=True,
),
)
remotes = client.list_sending_remotes()
print(f"{len(remotes.items)} sending remote(s) configured")
get_receiving_remote
V3Client.get_receiving_remote(
remote_id,
) -> ReceivingConnectionDto
Retrieve a receiving remote connection by ID.
ReceivingConnectionDto.allow_reshare is read-only. The value is the sender's setting, learned when the connection syncs.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the receiving remote to get. |
Returns: ReceivingConnectionDto — the receiving remote, including allow_reshare.
- Basic
- Full example
remote = client.get_receiving_remote("remote-id-here")
print(remote.label)
from istari_digital_client.v3.models.update_receiving_connection_dto import UpdateReceivingConnectionDto
remote = client.get_receiving_remote("remote-id-here")
updated = client.update_receiving_remote(
remote_id=remote.id,
update_receiving_connection_dto=UpdateReceivingConnectionDto(label="renamed"),
)
get_sending_remote
V3Client.get_sending_remote(
remote_id,
) -> SendingConnectionDto
Retrieve a sending remote connection by ID.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the sending remote to get. |
Returns: SendingConnectionDto — the sending remote.
- Basic
- Full example
remote = client.get_sending_remote("remote-id-here")
print(remote.label)
from istari_digital_client.v3.models.update_sending_connection_dto import UpdateSendingConnectionDto
remote = client.get_sending_remote("remote-id-here")
updated = client.update_sending_remote(
remote_id=remote.id,
update_sending_connection_dto=UpdateSendingConnectionDto(label="renamed"),
)
list_receiving_remotes
V3Client.list_receiving_remotes(
*,
cursor=None,
size=None,
include_total=None,
show_archived=None,
) -> CursorPageReceivingConnectionDto
List receiving remote connections. Each item's allow_reshare is read-only and is the sender's setting, learned when the connection syncs.
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
show_archived | bool | None | None | Include archived remotes when True. |
Returns: CursorPageReceivingConnectionDto — paginated list. Each item includes allow_reshare.
- Basic
- Full example
page = client.list_receiving_remotes()
for r in page.items:
print(r.id, r.label)
page = client.list_receiving_remotes(include_total=True, show_archived=True)
print(f"{page.total} receiving remote(s) (including archived)")
list_sending_remotes
V3Client.list_sending_remotes(
*,
cursor=None,
size=None,
include_total=None,
show_archived=None,
) -> CursorPageSendingConnectionDto
List sending remote connections.
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | Pagination cursor. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
show_archived | bool | None | None | Include archived remotes when True. |
Returns: CursorPageSendingConnectionDto — paginated list.
- Basic
- Full example
page = client.list_sending_remotes()
for r in page.items:
print(r.id, r.label)
page = client.list_sending_remotes(include_total=True)
print(f"{page.total} sending remote(s) configured")
update_receiving_remote
V3Client.update_receiving_remote(
remote_id,
update_receiving_connection_dto,
) -> ReceivingConnectionDto
Update a receiving remote connection.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the receiving remote to update. |
update_receiving_connection_dto | UpdateReceivingConnectionDto | DTO containing the fields to update. |
Returns: ReceivingConnectionDto — the updated receiving remote.
- Basic
- Full example
from istari_digital_client.v3.models.update_receiving_connection_dto import UpdateReceivingConnectionDto
updated = client.update_receiving_remote(
remote_id="remote-id-here",
update_receiving_connection_dto=UpdateReceivingConnectionDto(label="new-name"),
)
from istari_digital_client.v3.models.update_receiving_connection_dto import UpdateReceivingConnectionDto
remote = client.get_receiving_remote("remote-id-here")
updated = client.update_receiving_remote(
remote_id=remote.id,
update_receiving_connection_dto=UpdateReceivingConnectionDto(label="renamed-remote"),
)
print(updated.label)
update_sending_remote
V3Client.update_sending_remote(
remote_id,
update_sending_connection_dto,
) -> SendingConnectionDto
Update a sending remote connection.
UpdateSendingConnectionDto.allow_reshare changes whether the receiving organization may share files that arrived over this connection onward over its own sending connections.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the sending remote to update. |
update_sending_connection_dto | UpdateSendingConnectionDto | DTO containing the fields to update. allow_reshare (bool, optional) sets whether the receiver may share onward. |
Returns: SendingConnectionDto — the updated sending remote, including allow_reshare.
- Basic
- Full example
from istari_digital_client.v3.models.update_sending_connection_dto import UpdateSendingConnectionDto
updated = client.update_sending_remote(
remote_id="remote-id-here",
update_sending_connection_dto=UpdateSendingConnectionDto(label="new-name"),
)
from istari_digital_client.v3.models.update_sending_connection_dto import UpdateSendingConnectionDto
remote = client.get_sending_remote("remote-id-here")
updated = client.update_sending_remote(
remote_id=remote.id,
update_sending_connection_dto=UpdateSendingConnectionDto(
label="renamed-remote",
allow_reshare=True,
),
)
print(updated.label, updated.allow_reshare)
Secure Connection Sharing
Share individual resources with a partner organization over a Sending Connection (Secure Connection) that an administrator has already configured. These methods are the SDK counterpart of the Share with external connection dialog described in Secure Connections.
The same rules apply as in the web app:
- Only models and artifacts are synced to the partner. Systems cannot be shared as a whole. The share and list calls accept the file of any resource type and do not reject a standalone file, so check
resource_typeyourself rather than relying on an error. - The caller needs Editor access or above on the resource. Any authenticated user may list shareable connections.
- The connection must exist and be active. Creating connections is an administrator task — see Set up Secure Connections.
- The connection's Permitted Infosec Level and Tag Rules still apply. A share that violates them is rejected or automatically revoked.
- If the connection restricts Permitted Senders, you must be on its list, and your per-user level (View or Edit) caps the
share_levelyou may request in addition to the connection's ceiling. There is no non-admin call to read your own level; a share above it fails with403. See Permitted Senders. - Sync is asynchronous. A share call returns as soon as the share is recorded; the partner receives the file on the next sync cycle (typically 1–2 minutes).
- List calls are paginated. Each page exposes the cursor for the next page as
next_page; pass it back ascursoruntil it isNone.
Share methods take the resource's file_id (the storage-level identifier on ResourceDto), not its resource_id. list_sending_remote_shares_for_resource() takes the resource_id and resolves the file for you.
list_shareable_sending_connections
V3Client.list_shareable_sending_connections(
*,
cursor=None,
size=None,
include_total=None,
) -> CursorPageShareableSendingConnectionDto
List the active Sending Connections a resource may be shared to. Unlike list_sending_remotes(), this is available to non-administrators and returns a slim projection without connection configuration. Secure Connections are not tenant-scoped, so the list is instance-wide.
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | next_page from the previous page. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
Returns: CursorPageShareableSendingConnectionDto — paginated list. Each item carries id, label, description, and received_access_level, the ceiling for the share_level you may request on that connection.
- Basic
- Full example
page = client.list_shareable_sending_connections()
for conn in page.items:
print(conn.id, conn.label, conn.received_access_level)
from istari_digital_client.v3.models.received_access_level import ReceivedAccessLevel
# Find the connections that allow Edit access on the partner side, across all pages
editable = []
cursor = None
while True:
page = client.list_shareable_sending_connections(size=100, cursor=cursor)
editable.extend(
conn for conn in page.items
if conn.received_access_level == ReceivedAccessLevel.EDITOR
)
cursor = page.next_page
if not cursor:
break
for conn in editable:
print(f"{conn.label}: {conn.description}")
share_file_to_sending_remote
V3Client.share_file_to_sending_remote(
remote_id,
file_id,
share_file_to_sending_remote_dto=None,
) -> RemoteFileShareDto
Share a resource's file with the partner behind a Sending Connection. If the file was previously shared and then revoked, the share is restored. Calling it again on an active share updates the share_level in place.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the Sending Connection to share to. |
file_id | str | The file_id of the resource to share. |
share_file_to_sending_remote_dto | ShareFileToSendingRemoteDto | None | Optional body. share_level is ReceivedAccessLevel.VIEWER (default) or ReceivedAccessLevel.EDITOR. |
share_level controls what the partner can do with their copy. Viewer is read-only; Editor lets the receiving organization run jobs on the resource and add revisions to their copy. You cannot request Editor on a connection whose received_access_level is Viewer, or when the administrator has listed you as a View-level permitted sender on that connection.
Returns: RemoteFileShareDto — the share record, with id, sending_connection_id, sending_connection_label, file_id, share_level, created, is_archived, and archived.
- Basic
- Full example
resource = client.get_resource("resource-id-here")
share = client.share_file_to_sending_remote(
remote_id="sending-connection-id-here",
file_id=resource.file_id,
)
print(share.share_level) # Viewer
from istari_digital_client.v3.models.received_access_level import ReceivedAccessLevel
from istari_digital_client.v3.models.share_file_to_sending_remote_dto import ShareFileToSendingRemoteDto
resource = client.get_resource("resource-id-here")
# Pick the connection by label and check its ceiling before asking for Editor
conn = next(
c for c in client.list_shareable_sending_connections(size=100).items
if c.label == "partner-registry"
)
if conn.received_access_level != ReceivedAccessLevel.EDITOR:
raise RuntimeError(f"{conn.label} only permits view access")
share = client.share_file_to_sending_remote(
remote_id=conn.id,
file_id=resource.file_id,
share_file_to_sending_remote_dto=ShareFileToSendingRemoteDto(
share_level=ReceivedAccessLevel.EDITOR,
),
)
print(f"Shared to {share.sending_connection_label} at {share.share_level}")
revoke_file_from_sending_remote
V3Client.revoke_file_from_sending_remote(
remote_id,
file_id,
) -> RemoteFileShareDto
Stop sharing a resource's file over a Sending Connection. This stops future synchronization and sends a revocation signal across the connection; the partner's platform tombstones its copy on a later sync cycle. Revocation is best-effort and cannot purge data the partner has already exported. See Revocation and Tombstoned Files.
Parameters
| Name | Type | Description |
|---|---|---|
remote_id | str | The ID of the Sending Connection to revoke from. |
file_id | str | The file_id of the resource to stop sharing. |
Returns: RemoteFileShareDto — the share record with is_archived=True and archived set.
- Basic
- Full example
resource = client.get_resource("resource-id-here")
revoked = client.revoke_file_from_sending_remote(
remote_id="sending-connection-id-here",
file_id=resource.file_id,
)
print(revoked.is_archived) # True
# Revoke a resource from every connection it is currently shared to.
# Collect every page first so a later-page share is not missed.
resource = client.get_resource("resource-id-here")
shares = []
cursor = None
while True:
page = client.list_sending_remote_shares_for_resource(
resource_id=resource.resource_id,
size=100,
cursor=cursor,
)
shares.extend(page.items)
cursor = page.next_page
if not cursor:
break
for share in shares:
client.revoke_file_from_sending_remote(
remote_id=share.sending_connection_id,
file_id=share.file_id,
)
print(f"Revoked from {share.sending_connection_label}")
list_sending_remote_shares_for_resource
V3Client.list_sending_remote_shares_for_resource(
resource_id,
*,
cursor=None,
size=None,
include_total=None,
show_archived=None,
) -> CursorPageRemoteFileShareDto
List the Sending Connections a resource is shared to. This is the SDK equivalent of the Connections row on the resource's details pane. The resource's underlying file is resolved automatically, so pass the resource_id.
Parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | The resource_id of the resource to list shares for. |
Optional parameters
| Name | Type | Default | Description |
|---|---|---|---|
cursor | str | None | None | next_page from the previous page. |
size | int | None | None | Page size (0–100). |
include_total | bool | None | None | Include total count. |
show_archived | bool | None | None | Include revoked shares when True. |
Returns: CursorPageRemoteFileShareDto — paginated list of RemoteFileShareDto. By default only active shares are returned.
- Basic
- Full example
page = client.list_sending_remote_shares_for_resource(resource_id="resource-id-here")
for share in page.items:
print(share.sending_connection_label, share.share_level)
# Include revoked shares to see the full sharing history of a resource
page = client.list_sending_remote_shares_for_resource(
resource_id="resource-id-here",
show_archived=True,
include_total=True,
)
print(f"{page.total} share(s), including revoked")
for share in page.items:
state = "revoked" if share.is_archived else "active"
print(f"{share.sending_connection_label}: {share.share_level} ({state})")
Revision properties
update_resource_revision
V3Client.update_resource_revision(
resource_id,
revision_id,
resource_revision_update_dto,
http_request_timeout_secs=None,
) -> ResourceRevisionDto
Patches user-provided properties on an existing revision. Omitted fields stay as they are. An explicit null clears the value. A new upload is create_resource_revision().
Required parameters
| Name | Type | Description |
|---|---|---|
resource_id | str | Resource that owns the revision. |
revision_id | str | Revision to update. |
resource_revision_update_dto | ResourceRevisionUpdateDto | Optional fields: display_name, description, version_name, external_identifier. Each max 255. |
Returns: ResourceRevisionDto
Workflow logs
Record a run that happened outside an Istari job. The how-to is External workflow logs. The web app view is Workflow log.
create_workflow_output on V3Client takes a filesystem path and uploads the file. The generated method underneath takes a WorkflowOutputCreateDto; call the V3Client form.
create_workflow_output
V3Client.create_workflow_output(
system_id,
path,
*,
description=None,
display_name=None,
external_identifier=None,
) -> WorkflowOutputDto
| Name | Type | Description |
|---|---|---|
system_id | str | System that stores the output. |
path | PathLike | File to upload. |
description | str | None | Optional description. |
display_name | str | None | Optional display name. |
external_identifier | str | None | Optional external id. |
Returns: WorkflowOutputDto
create_workflow_log_entry
V3Client.create_workflow_log_entry(
system_id,
workflow_log_entry_create_dto,
http_request_timeout_secs=None,
) -> WorkflowLogEntryDto
WorkflowLogEntryCreateDto fields, all optional: title (max 255), status (max 64; the platform default when omitted is UNSPECIFIED), workflow_type (max 64; default external), configuration_id, branch_id, branchless (default False), workflow_output_ids.
Unless branchless is true, configuration_id is required. Omitting branch_id records the system's baseline branch. When branchless is true, omit both configuration_id and branch_id.
list_workflow_log_entries
V3Client.list_workflow_log_entries(
system_id,
cursor=None,
size=None,
include_total=None,
branch_id=None,
title=None,
status=None,
archive_status=None,
) -> CursorPageWorkflowLogEntryDto
branch_id, title, and status are lists. archive_status is active, archived, or all.
get_workflow_log_entry
V3Client.get_workflow_log_entry(system_id, entry_id) -> WorkflowLogEntryDetailDto
The detail includes workflow_outputs.
archive_workflow_log_entry
V3Client.archive_workflow_log_entry(system_id, entry_id) -> None
restore_workflow_log_entry
V3Client.restore_workflow_log_entry(system_id, entry_id) -> WorkflowLogEntryDto
Secure connection governance
Owners, permitted senders, infosec mappings, sync status, and tag-rule checks for a remote created with the Remote connections methods. remote_id is that connection's id.
Starring a Secure Connection is separate from resource and system favorites.
favorite_connection
V3Client.favorite_connection(connection_id) -> None
unfavorite_connection
V3Client.unfavorite_connection(connection_id) -> None
get_receiving_connection_owners
V3Client.get_receiving_connection_owners(remote_id) -> list[ReceivingConnectionOwnerDto]
set_receiving_connection_owners
Replaces the owner list. An owner without access_level is EDITOR.
V3Client.set_receiving_connection_owners(
remote_id,
set_receiving_connection_owners_dto,
) -> list[ReceivingConnectionOwnerDto]
SetReceivingConnectionOwnersDto.owners is the complete list.
get_sending_connection_permitted_senders
V3Client.get_sending_connection_permitted_senders(remote_id) -> list[SendingConnectionPermittedSenderDto]
set_sending_connection_permitted_senders
Replaces the permitted-sender list. A sender without access_level is EDITOR.
V3Client.set_sending_connection_permitted_senders(
remote_id,
set_sending_connection_permitted_senders_dto,
) -> list[SendingConnectionPermittedSenderDto]
get_receiving_connection_infosec_levels
Incoming infosec levels observed on a receiving connection.
V3Client.get_receiving_connection_infosec_levels(remote_id) -> list[ReceivingConnectionInfosecLevelDto]
get_receiving_connection_infosec_level_mappings
V3Client.get_receiving_connection_infosec_level_mappings(remote_id) -> list[ReceivingConnectionInfosecLevelMappingDto]
set_receiving_connection_infosec_level_mappings
Replaces the mapping list. An empty list removes every mapping.
V3Client.set_receiving_connection_infosec_level_mappings(
remote_id,
set_receiving_connection_infosec_level_mappings_dto,
) -> list[ReceivingConnectionInfosecLevelMappingDto]
get_receiving_connection_control_tags
V3Client.get_receiving_connection_control_tags(remote_id) -> list[ReceivingConnectionControlTagDto]
list_receiving_remote_sync_statuses
V3Client.list_receiving_remote_sync_statuses(
remote_id,
only_with_updates=None,
cursor=None,
size=None,
include_total=None,
) -> CursorPageSyncStatusUpdateDtoCustomized
list_sending_remote_sync_statuses
Same parameters and return type as list_receiving_remote_sync_statuses, for a sending remote.
list_resource_sync_status_by_connection
Most recent sync status of one resource on each Secure Connection.
V3Client.list_resource_sync_status_by_connection(resource_id) -> list[ResourceSyncStatusByConnectionDto]
evaluate_sending_remote_tag_sets
Previews what a sending remote's tag rules do to the given control-tag sets. Results come back in request order.
V3Client.evaluate_sending_remote_tag_sets(
remote_id,
evaluate_sending_tag_sets_with_hypothetical_rule_set_dto,
) -> list[SendingTagSetEvaluationDto]
tag_sets is a list of tag-id lists (at most 1000 sets, 200 ids each). hypothetical_rule_set is optional.
validate_receiving_remote_manifest_catalog
Checks a manifest's control-tag catalog against a receiving remote. Send the tags the manifest reports as unarchived.
V3Client.validate_receiving_remote_manifest_catalog(
remote_id,
validate_manifest_catalog_dto,
) -> ManifestCatalogValidationDto
ValidateManifestCatalogDto.control_tag_ids holds at most 1000 ids.
Object stores
list_object_stores
V3Client.list_object_stores(
cursor=None,
size=None,
include_total=None,
) -> CursorPageObjectStoreDto
size is 0–100 and defaults to 10. Pass the previous response's cursor to continue.
Authentication advisory
auth_deprecation
V3Client.auth_deprecation is a property, not a method call. It is the latest auth-deprecation advisory captured by a request, or None. It is set when the client authenticates with a personal access token against an Identity-Service-enabled registry. Exchange that token with client.keys.exchange_pat() or generate_keypair_and_exchange().
Client.check_auth_deprecation() forces a fresh check. V3Client exposes the stored result only.