Connected resources (V3Client)
A connected Resource is a link to data in a third-party app. You connect it by uploading a metadata pointer file with V3Client. The platform stores the pointer; the engineering bytes stay in the third-party app until an agent fetches them for a job.
Use V3Client to connect Resources and manage revisions. Use Client to run jobs — resource ids are shared between both clients. This page follows the same order as the Client version: connect, run jobs, then revise.
For upload vs connect, metadata extensions, credentials, and Windchill pointer details, see Connected resources (Client). An administrator connects each third-party app once before its data can be reached — see App Integrations.
Prerequisites
- Python Client — installed, and a
Configurationfrom Setup → Initialize the client. - App integration (admin) — an administrator connects the target app once in the web app. See App Integrations.
- A stored credential — needed to run jobs on the Resource, not to connect it. See Run jobs on a third-party Resource.
- Host app access — the agent account must be able to open the external object. See Connecting files.
Connect a third-party Resource
- Create a JSON metadata pointer file (see Metadata extensions).
- Call
v3.create_resource(path=..., resource_type="model")(or"artifact"/"file"when the pointer is that type).ResourceTypeDtoalso includesconnected_containerandconnected_resourcefor content the platform observes at a connected source.
The path is the same metadata file you would pass to client.add_model(path=...).
Both clients take the same Configuration. Create it once as shown in Setup → Initialize the client, then build both from it — the examples below assume client and v3:
from istari_digital_client import Client, V3Client
client = Client(config) # runs jobs
v3 = V3Client(config) # connects Resources and manages revisions
Example: Teamwork Cloud (Cameo)
Save a metadata pointer file (for example my_project.istari_teamwork_cloud_metadata_mdzip). Either shape below works:
By project name, branch, and version:
{
"project_name": "Istari_UAVOne(notional)",
"branch_name": "trunk",
"version": "11"
}
By identifier URI:
{
"identifier": "mdel://ANY?projectID=twcloud:/cf16d07a-9a9f-43dd-8ad9-bee73d9e2581/9903a418-e792-4a69-9add-dc01fe2f57de&serverType=esiserver&serverName=10.30.102.103&projectName=Istari_UAVOne(notional)&elementName=ANY_NAME"
}
Connect it:
resource = v3.create_resource(
path="my_project.istari_teamwork_cloud_metadata_mdzip",
resource_type="model",
display_name="TWC — Systems model",
description="Connected Teamwork Cloud project",
)
print(resource.resource_id)
Example: Windchill (via Creo module)
Save input.istari_windchill_metadata with the oid from the Windchill URL — see Connected resources (Client).
resource = v3.create_resource(
path="input.istari_windchill_metadata",
resource_type="model",
display_name="Windchill CAD",
)
Run jobs on a third-party Resource
V3Client does not run functions. Pass resource.resource_id as model_id on Client.add_job, and bind a stored credential with auth_bindings when the function declares an authentication input:
from istari_digital_client import NewCredentialBinding
twc_credential = next(
c for c in client.list_credentials() if c.name == "My Teamwork Cloud account"
)
job = client.add_job(
model_id=resource.resource_id,
function="@istari:twc_extract",
tool_name="dassault_cameo",
tool_version="2022x Refresh2",
operating_system="Windows 11",
auth_bindings=[
NewCredentialBinding(
input_name="twc_auth_login",
credential_id=twc_credential.id,
)
],
)
The credential model is the same as on Client — see Run jobs on a third-party Resource. Poll and read outputs with get_job, get_model, and the artifact helpers — see Jobs and Use both clients together.
Revise a third-party Resource
When the link points somewhere new, upload an updated metadata file. The resource id stays the same:
revision = v3.create_resource_revision(
resource_id=resource.resource_id,
path="my_project_v2.istari_teamwork_cloud_metadata_mdzip",
version_name="link-2026-04",
description="Point at TWC version 12",
)
This matches client.update_model(model_id=..., path=...) on Client.
To inspect what is there now — including the revision the platform imported after a job that wrote back to the third-party app:
page = v3.list_resources(type_name=["model"])
resource = v3.get_resource(resource_id=resource.resource_id)
for rev in v3.list_resource_revisions(resource_id=resource.resource_id).items:
print(rev.file_revision_id, rev.version_name, rev.name, rev.created)
Related documentation
- Connected resources (Client) — extensions, credentials, and
auth_bindings - App Integrations — connecting an app and creating service accounts
- V3Client reference —
create_resource,create_resource_revision - Migrating from Client to V3Client