- Overview
- Get started
- Concepts
- Using UiPath CLI
- How-to guides
- CI/CD recipes
- Command reference
- Overview
- Exit codes
- Global options
- uip codedagent
- uip coder
- uip context-grounding
- uip docsai
- uip function
- uip guardrails
- uip llm-configuration
- uip llm-gateway
- uip maestro authoring
- uip maestro registry
- uip model-hub
- activities find
- activities get-default-xaml
- analyze
- analyzer-rules list
- build
- cleanup
- data-fabric-entities install
- data-fabric-entities list
- files diff
- get-library-object-repository
- get-object-repository
- init
- instances list
- pack
- packages inspect
- packages install
- packages versions
- publish
- remote
- restore
- run, debug & execution
- settings
- studio start
- templates search
- test-data add-entity
- test-data add-queue
- test-data add-variation
- tm
- uia
- validate
- workflow-examples get
- workflow-examples list
- uip tasks
- uip traces
- uip traces feedback
- Migration
- Reference & support
uip tm attachment
Syntax and options for `uip tm attachment`, which uploads, lists, reads, renames, deletes, and downloads files attached to Test Manager objects such as test case logs, test cases, and requirements.
uip tm attachment manages files attached to Test Manager objects: screenshots, serialized state, recorded logs, export files, and any file an automation or a user attached to a project, requirement, test case, test set, execution, test case log, or test step log. You can download every attachment of an execution in one sweep, or work with a single attachment by its ID.
Every verb that names one attachment takes --object-type, the type of the object the file is attached to. The server uses it to pick the permission it checks; it does not verify that the attachment belongs to an object of that type. Accepted values: project, requirement, testCase, testSet, testExecution, testStepLog, testCaseLog, explorationResult.
Synopsis
uip tm attachment download --execution-id <uuid> (--project-id <id> | --project-key <key> | --test-set-key <key>)
[--test-case-name <name>]… [--only-failed] [--result-path <path>] [--overwrite]
uip tm attachment download --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key> | --test-set-key <key>)
[--output-file <path> | --result-path <path>] [--overwrite]
uip tm attachment upload --object-id <uuid> --object-type <type> --file <path>
(--project-id <id> | --project-key <key> | --test-set-key <key>)
[--source <source>] [--attachment-type <type>]
uip tm attachment list (--project-id <id> | --project-key <key>)
(--object-ids <uuids...> --object-type <type> | --test-case-keys <keys...> | --requirement-keys <keys...> | --all --object-type <type>)
[--source <source>] [--limit <n>] [--offset <n>]
uip tm attachment get --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key>)
uip tm attachment update --attachment-id <uuid> --object-type <type> --file-name <name> (--project-id <id> | --project-key <key>)
uip tm attachment delete --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key>) --yes
uip tm attachment download --execution-id <uuid> (--project-id <id> | --project-key <key> | --test-set-key <key>)
[--test-case-name <name>]… [--only-failed] [--result-path <path>] [--overwrite]
uip tm attachment download --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key> | --test-set-key <key>)
[--output-file <path> | --result-path <path>] [--overwrite]
uip tm attachment upload --object-id <uuid> --object-type <type> --file <path>
(--project-id <id> | --project-key <key> | --test-set-key <key>)
[--source <source>] [--attachment-type <type>]
uip tm attachment list (--project-id <id> | --project-key <key>)
(--object-ids <uuids...> --object-type <type> | --test-case-keys <keys...> | --requirement-keys <keys...> | --all --object-type <type>)
[--source <source>] [--limit <n>] [--offset <n>]
uip tm attachment get --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key>)
uip tm attachment update --attachment-id <uuid> --object-type <type> --file-name <name> (--project-id <id> | --project-key <key>)
uip tm attachment delete --attachment-id <uuid> --object-type <type> (--project-id <id> | --project-key <key>) --yes
All verbs honor the global options and the standard exit codes.
Every verb needs a project. Pass --project-id or --project-key; download and upload also accept --test-set-key. When you pass more than one, --project-id wins, then --project-key, then the project key derived from the --test-set-key prefix. If you pass none of them, the command fails with ErrorCode: invalid_argument.
uip tm attachment download
Download attachments in one of two modes. Exactly one of --execution-id or --attachment-id is required, and each mode refuses the other mode's flags.
| Mode | Selected by | Mode-only flags |
|---|---|---|
| Execution sweep | --execution-id | --test-case-name, --only-failed |
| Single file | --attachment-id with --object-type | --object-type, --output-file |
In execution mode, the command pages through the test case logs of the execution, optionally narrows to failed-only or to named test cases, then downloads the files of each test case log into a per-test-case subdirectory under --result-path. For each test case log, the command downloads:
- The attachments of the test case log.
- The assertion screenshots, when the execution type is
automatedormixed. - The attachments of each test step log, when the execution type is
manualormixed.
In single-file mode, the command downloads one attachment, for example the file an export job produced (--object-type project). Without --output-file, the file keeps its server file name inside --result-path.
Arguments
None.
Options
--execution-id <uuid>— execution whose attachments to pull.--attachment-id <uuid>— one attachment to download. Needs--object-type.--object-type <type>— with--attachment-idonly: type of the object the file is attached to.--output-file <path>— with--attachment-idonly: exact path to write, overriding--result-path. Parent directories are created.FileNamein the output is then this path's basename.--overwrite— replace files that already exist. Without it,--attachment-idrefuses an existing target, and--execution-idskips existing files and lists them underSkipped.--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.--test-set-key <key>— test set key (for example,DEMO:42); the project key is derived from the prefix.--test-case-name <name>— with--execution-idonly: filter by test case name (case-insensitive substring). Repeat to accept any of several names.--only-failed— with--execution-idonly: download attachments only for failed test case logs.--result-path <path>— output directory. Defaults to the current directory. The directory is created if missing.
Examples
# download every attachment of an execution
uip tm attachment download \
--execution-id a1b2c3d4-0000-0000-0000-000000000001 \
--project-key DEMO \
--result-path ./attachments
# only failed tests, narrowed to two test case names
uip tm attachment download \
--execution-id a1b2c3d4-0000-0000-0000-000000000001 \
--project-key DEMO \
--only-failed \
--test-case-name login \
--test-case-name checkout \
--result-path ./attachments
# one attachment by ID, to an exact path
uip tm attachment download \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO \
--output-file ./evidence/checkout-failure.png
# download every attachment of an execution
uip tm attachment download \
--execution-id a1b2c3d4-0000-0000-0000-000000000001 \
--project-key DEMO \
--result-path ./attachments
# only failed tests, narrowed to two test case names
uip tm attachment download \
--execution-id a1b2c3d4-0000-0000-0000-000000000001 \
--project-key DEMO \
--only-failed \
--test-case-name login \
--test-case-name checkout \
--result-path ./attachments
# one attachment by ID, to an exact path
uip tm attachment download \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO \
--output-file ./evidence/checkout-failure.png
Data shape (execution mode)
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"OutputPath": "./attachments",
"Downloaded": 3,
"MatchedTestCases": 2
}
}
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"OutputPath": "./attachments",
"Downloaded": 3,
"MatchedTestCases": 2
}
}
When an attachment list could not be read, the assertion screenshots could not be fetched, or a file already existed without --overwrite, Data also carries a Skipped array with one message per skipped item. A single file that fails to download is logged as a warning on stderr and is not counted in Downloaded, and it is not listed under Skipped:
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"OutputPath": "./attachments",
"Downloaded": 2,
"MatchedTestCases": 3,
"Skipped": ["Login flow: HTTP 404: Not Found"]
}
}
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"OutputPath": "./attachments",
"Downloaded": 2,
"MatchedTestCases": 3,
"Skipped": ["Login flow: HTTP 404: Not Found"]
}
}
When no test case log matches the filters:
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"Message": "No matching test case logs found.",
"Downloaded": 0
}
}
{
"Code": "AttachmentDownload",
"Data": {
"ExecutionId": "a1b2c3d4-0000-0000-0000-000000000001",
"Message": "No matching test case logs found.",
"Downloaded": 0
}
}
Data shape (single-file mode)
{
"Code": "AttachmentDownload",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"ObjectType": "testCase",
"FileName": "checkout-failure.png",
"OutputPath": "./evidence/checkout-failure.png",
"Size": 48213
}
}
{
"Code": "AttachmentDownload",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"ObjectType": "testCase",
"FileName": "checkout-failure.png",
"OutputPath": "./evidence/checkout-failure.png",
"Size": 48213
}
}
uip tm attachment upload
Upload a file as an attachment to a test case log or other Test Manager object. Passing --source or --attachment-type uploads the file as a tagged attachment. Tagged uploads need a Test Manager feature that not every environment turns on; drop both flags to attach the file untagged.
Arguments
None.
Options
--object-id <uuid>(required) — UUID of the object to attach the file to (for example, a test case log ID).--object-type <type>(required) — type of the object. One ofproject,requirement,testCase,testSet,testExecution,testStepLog,testCaseLog,explorationResult.--file <path>(required) — local path to the file to upload.--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.--test-set-key <key>— test set key (for example,DEMO:42); the project key is derived from the prefix.--source <source>— upload source of a tagged attachment. One ofnone,autonomousExecution,autonomousExploration.--attachment-type <type>— attachment type of a tagged attachment. One ofnone,stepExecutionTrace,stepVerificationTrace.
Examples
# upload a screenshot to a test case log
uip tm attachment upload \
--object-id a1b2c3d4-0000-0000-0000-000000000001 \
--object-type testCaseLog \
--project-key DEMO \
--file ./screenshot.png
# upload an autonomous-execution trace as a tagged attachment
uip tm attachment upload \
--object-id a1b2c3d4-0000-0000-0000-000000000001 \
--object-type testCaseLog \
--project-id 9dfdc3ca-fc75-0100-2aae-0b46e318b723 \
--file ./trace.png \
--source autonomousExecution \
--attachment-type stepExecutionTrace
# upload a screenshot to a test case log
uip tm attachment upload \
--object-id a1b2c3d4-0000-0000-0000-000000000001 \
--object-type testCaseLog \
--project-key DEMO \
--file ./screenshot.png
# upload an autonomous-execution trace as a tagged attachment
uip tm attachment upload \
--object-id a1b2c3d4-0000-0000-0000-000000000001 \
--object-type testCaseLog \
--project-id 9dfdc3ca-fc75-0100-2aae-0b46e318b723 \
--file ./trace.png \
--source autonomousExecution \
--attachment-type stepExecutionTrace
Data shape
{
"Code": "AttachmentUpload",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000b",
"FileName": "trace.png",
"ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
"ObjectType": "testCaseLog",
"Source": "autonomousExecution",
"AttachmentType": "stepExecutionTrace"
}
}
{
"Code": "AttachmentUpload",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000b",
"FileName": "trace.png",
"ObjectId": "a1b2c3d4-0000-0000-0000-000000000001",
"ObjectType": "testCaseLog",
"Source": "autonomousExecution",
"AttachmentType": "stepExecutionTrace"
}
}
Source and AttachmentType appear only for tagged uploads. AttachmentId is null when the server response carries no body.
uip tm attachment list
List the attachments of Test Manager objects, one row per object with its attachments nested. Pick the objects with exactly one selector: --object-ids, --test-case-keys, --requirement-keys, or --all.
A key that does not resolve does not fail the call. JSON and YAML output list it under Unresolved beside Data, and the envelope's Warning and a message on stderr name it too. The call fails only when none of the keys resolve.
Arguments
None.
Options
--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.--object-type <type>— type of the objects. Required with--object-idsand--all; implied by--test-case-keys(testCase) and--requirement-keys(requirement), which refuse a contradicting value.--object-ids <uuids...>— space-separated object UUIDs. The server does not check that the IDs exist, so an unknown ID showsAttachmentCount: 0, the same as an object with no attachments.--test-case-keys <keys...>— space-separated test case keys, for exampleDEMO:1 DEMO:2.--requirement-keys <keys...>— space-separated requirement keys, for exampleDEMO:7.--all— every object of--object-typein the project. Works withtestCase,requirement, andtestSet. Returns one page per call; the envelope'sPaginationsays whether more remain.--source <source>— only attachments from this source:taskCapture,userBased,studio,orchestrator. The server defaults touserBased.--limit <n>— return at most this many objects, at most100. Defaults to50with--all; otherwise every ID or key given.--offset <n>— objects to skip first. Defaults to0.
Examples
# attachments of two test cases, by key
uip tm attachment list \
--project-key DEMO \
--test-case-keys DEMO:1 DEMO:2
# attachments of the first 50 requirements in the project
uip tm attachment list \
--project-key DEMO \
--object-type requirement \
--all
# attachments of two test cases, by key
uip tm attachment list \
--project-key DEMO \
--test-case-keys DEMO:1 DEMO:2
# attachments of the first 50 requirements in the project
uip tm attachment list \
--project-key DEMO \
--object-type requirement \
--all
Data shape
{
"Code": "AttachmentList",
"Data": [
{
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectKey": "DEMO:1",
"ObjectName": "Checkout",
"AttachmentCount": 1,
"AttachmentIds": ["a1b2c3d4-0000-0000-0000-00000000000a"],
"Attachments": [
{
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
]
},
{
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000002",
"ObjectKey": "DEMO:2",
"ObjectName": "Login",
"AttachmentCount": 0,
"AttachmentIds": [],
"Attachments": []
}
]
}
{
"Code": "AttachmentList",
"Data": [
{
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectKey": "DEMO:1",
"ObjectName": "Checkout",
"AttachmentCount": 1,
"AttachmentIds": ["a1b2c3d4-0000-0000-0000-00000000000a"],
"Attachments": [
{
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
]
},
{
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000002",
"ObjectKey": "DEMO:2",
"ObjectName": "Login",
"AttachmentCount": 0,
"AttachmentIds": [],
"Attachments": []
}
]
}
An object with no attachments keeps its row with an empty array. ObjectKey and ObjectName appear only when the object was resolved from a key or listed with --all. With --all, the envelope also carries Pagination (Returned, Limit, Offset, Total, HasMore); when HasMore is true, run again with a higher --offset.
uip tm attachment get
Get one attachment's metadata by ID.
Arguments
None.
Options
--attachment-id <uuid>(required) — attachment UUID, as shown byattachment list.--object-type <type>(required) — type of the object the attachment belongs to.--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.
Example
uip tm attachment get \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO
uip tm attachment get \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO
Data shape
{
"Code": "AttachmentGet",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
}
{
"Code": "AttachmentGet",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
}
An unknown attachment ID returns Result: "Failure" with ErrorCode: "not_found".
uip tm attachment update
Rename an attachment. The file name is the only field you can change.
Arguments
None.
Options
--attachment-id <uuid>(required) — attachment UUID, as shown byattachment list.--object-type <type>(required) — type of the object the attachment belongs to.--file-name <name>(required) — new file name, including its extension. At most 256 characters.--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.
Example
uip tm attachment update \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--file-name checkout-failure-v2.png \
--project-key DEMO
uip tm attachment update \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--file-name checkout-failure-v2.png \
--project-key DEMO
Data shape
{
"Code": "AttachmentUpdate",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure-v2.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
}
{
"Code": "AttachmentUpdate",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"FileName": "checkout-failure-v2.png",
"FileSize": 48213,
"FileExtension": ".png",
"ObjectId": "c1c2c3c4-0000-0000-0000-000000000001",
"ObjectType": "testCase",
"Source": "userBased",
"Created": "2026-09-28T09:12:44.000Z",
"CreatedBy": "1d39ab35-0000-0000-0000-000000000001",
"Tags": []
}
}
uip tm attachment delete
Delete an attachment by ID.
Arguments
None.
Options
--attachment-id <uuid>(required) — attachment UUID, as shown byattachment list.--object-type <type>(required) — type of the object the attachment belongs to.--project-id <id>— Test Manager project ID. Wins if--project-keyis also given.--project-key <key>— Test Manager project key (for example,DEMO). Ignored if--project-idis also given.-y, --yes(required) — confirms the irreversible operation. The CLI never prompts; without--yesthe command returnsResult: "Failure"and exits1.
Example
uip tm attachment delete \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO \
--yes
uip tm attachment delete \
--attachment-id a1b2c3d4-0000-0000-0000-00000000000a \
--object-type testCase \
--project-key DEMO \
--yes
Data shape
{
"Code": "AttachmentDelete",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"ObjectType": "testCase",
"Result": "Deleted"
}
}
{
"Code": "AttachmentDelete",
"Data": {
"AttachmentId": "a1b2c3d4-0000-0000-0000-00000000000a",
"ObjectType": "testCase",
"Result": "Deleted"
}
}
Related
- testsets run — produces the
ExecutionIdused bydownload. - wait — block until the execution is terminal before pulling attachments.
- teststeplog list —
HasAttachment: truemarks the test steps that carry files. - export-jobs — a completed export job's
AttachmentIdis the file to fetch withdownload --attachment-id. - result — JUnit XML of the same execution.
- report — human-readable summary.
See also
- Synopsis
- uip tm attachment download
- Arguments
- Options
- Examples
- Data shape (execution mode)
- Data shape (single-file mode)
- uip tm attachment upload
- Arguments
- Options
- Examples
- Data shape
- uip tm attachment list
- Arguments
- Options
- Examples
- Data shape
- uip tm attachment get
- Arguments
- Options
- Example
- Data shape
- uip tm attachment update
- Arguments
- Options
- Example
- Data shape
- uip tm attachment delete
- Arguments
- Options
- Example
- Data shape
- Related
- See also