# uip or attachments

> Syntax and options for `uip or attachments`, which manages job-level file attachments in Orchestrator.

`uip or attachments` manages job attachments — files attached to jobs as input or output (screenshots, reports, data files). Attachments are tenant-scoped so no folder context is required for `download`. For upload, use `jobs start --attachment` or `--attachment-id`.

## Synopsis

```
uip or attachments <verb> [options]
```

## Verbs

| Verb | Purpose |
|---|---|
| `list` | List attachments for a specific job. |
| `download` | Download a single attachment by ID. |

## uip or attachments list

List attachments for a job. Returns attachment ID, name, category (`Input` or `Output`), and creation timestamp. The verb resolves the job's folder context internally and calls the (unbatched) `JobAttachments/GetByJobKey` endpoint directly.

### Options

| Short | Long | Value | Default | Description |
|---|---|---|---|---|
| — | `--job-key` | GUID | **required** | Job key whose attachments to list. |
| `-t` | `--tenant` | name | session default | Override the tenant. |

### Examples

```bash
uip or attachments list --job-key b2c3d4e5-0000-0000-0000-000000000001

uip or attachments list --job-key b2c3d4e5-0000-0000-0000-000000000001 \
    --output-filter "Data[?Category=='Output'].AttachmentId"

uip or attachments list --job-key b2c3d4e5-0000-0000-0000-000000000001 --output table
```

### Data shape (--output json)

```json
{
  "Code": "AttachmentList",
  "Data": [
    {
      "AttachmentId": "a1b2c3d4-0000-0000-0000-000000000001",
      "Name": "screenshot.png",
      "Category": "Output",
      "Created": "2025-04-15T10:32:00Z"
    }
  ]
}
```

## uip or attachments download

Download a job attachment to local disk. The CLI uses `DownloadAttachmentFile`, which returns a 302 redirect to blob storage; the verb follows the redirect and writes the file to disk.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<attachment-id>` | yes | Attachment ID (GUID). Find it with `attachments list` or from `jobs get` output. |

### Options

| Short | Long | Value | Default | Description |
|---|---|---|---|---|
| `-t` | `--tenant` | name | session default | Override the tenant. |
| `-o` | `--output` | path | `attachment-<id>` | Output file path. |

### Examples

```bash
uip or attachments download a1b2c3d4-0000-0000-0000-000000000001 \
    --output ./report.pdf

uip or attachments download a1b2c3d4-0000-0000-0000-000000000001 \
    -o /tmp/screenshot.png

uip or attachments download a1b2c3d4-0000-0000-0000-000000000001 \
    --output ./report.pdf --output-filter 'Data.Size'
```

### Data shape (--output json)

```json
{
  "Code": "AttachmentDownloaded",
  "Data": {
    "AttachmentId": "a1b2c3d4-0000-0000-0000-000000000001",
    "FileName": "./report.pdf",
    "Size": 204812
  }
}
```

## Exit codes

See [Exit codes](./exit-codes.md). No verb-specific overrides.

## Related commands

- [`uip or jobs`](./uip-orchestrator-jobs.md) — `jobs start --attachment` / `--attachment-id` to attach files when launching a job; `jobs get` surfaces attachment references in its output.

## See also

- [Global options](./global-options.md).
