UiPath Documentation
uipath-cli
latest
false
UiPath CLI user guide

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.

ModeSelected byMode-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 automated or mixed.
  • The attachments of each test step log, when the execution type is manual or mixed.

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-id only: type of the object the file is attached to.
  • --output-file <path> — with --attachment-id only: exact path to write, overriding --result-path. Parent directories are created. FileName in the output is then this path's basename.
  • --overwrite — replace files that already exist. Without it, --attachment-id refuses an existing target, and --execution-id skips existing files and lists them under Skipped.
  • --project-id <id> — Test Manager project ID. Wins if --project-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is 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-id only: filter by test case name (case-insensitive substring). Repeat to accept any of several names.
  • --only-failed — with --execution-id only: 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 of project, 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-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is 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 of none, autonomousExecution, autonomousExploration.
  • --attachment-type <type> — attachment type of a tagged attachment. One of none, 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-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
  • --object-type <type> — type of the objects. Required with --object-ids and --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 shows AttachmentCount: 0, the same as an object with no attachments.
  • --test-case-keys <keys...> — space-separated test case keys, for example DEMO:1 DEMO:2.
  • --requirement-keys <keys...> — space-separated requirement keys, for example DEMO:7.
  • --all — every object of --object-type in the project. Works with testCase, requirement, and testSet. Returns one page per call; the envelope's Pagination says whether more remain.
  • --source <source> — only attachments from this source: taskCapture, userBased, studio, orchestrator. The server defaults to userBased.
  • --limit <n> — return at most this many objects, at most 100. Defaults to 50 with --all; otherwise every ID or key given.
  • --offset <n> — objects to skip first. Defaults to 0.

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 by attachment list.
  • --object-type <type> (required) — type of the object the attachment belongs to.
  • --project-id <id> — Test Manager project ID. Wins if --project-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is 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 by attachment 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-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is 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 by attachment list.
  • --object-type <type> (required) — type of the object the attachment belongs to.
  • --project-id <id> — Test Manager project ID. Wins if --project-key is also given.
  • --project-key <key> — Test Manager project key (for example, DEMO). Ignored if --project-id is also given.
  • -y, --yes (required) — confirms the irreversible operation. The CLI never prompts; without --yes the command returns Result: "Failure" and exits 1.

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"
  }
}
  • testsets run — produces the ExecutionId used by download.
  • wait — block until the execution is terminal before pulling attachments.
  • teststeplog list — HasAttachment: true marks the test steps that carry files.
  • export-jobs — a completed export job's AttachmentId is the file to fetch with download --attachment-id.
  • result — JUnit XML of the same execution.
  • report — human-readable summary.

See also​

Was this page helpful?

Connect

Need help? Support(opens in new window)

Want to learn? UiPath Academy(opens in new window)

Have questions? UiPath Forum(opens in new window)

Stay updated