> ## Documentation Index
> Fetch the complete documentation index at: https://www.openpmm.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage assets and destinations

> Upload assets, manage Destinations, and configure Slack notifications with the OpenPMM CLI.

## Upload an asset

The CLI calculates the required CRC64NVME checksums. It uploads the file in 8 MiB parts.

The CLI retries a failed part. It does not send the API key to a storage URL.

```bash theme={null}
openpmm assets upload ./launch.webp \
  --workspace ws_01JABCDEF \
  --json
```

Video files use the generic `video` Asset kind. This value does not select a
YouTube Short or a provider Reel placement. Use the Post destination options
for that choice.

## Download an asset

The CLI refuses to overwrite an existing local file.

```bash theme={null}
openpmm assets download ast_01JABCDEF \
  --workspace ws_01JABCDEF \
  --output ./launch.webp
```

## Manage destinations

The destination list contains connected publishing targets. It does not contain disconnected provider placeholders. The `status` column is `ready`, `disabled`, `reauthorization-required`, or `unavailable`. When a Destination is unavailable, `unavailable_reason` identifies the cause. Refresh warnings also include a machine-readable `reason`.

```bash theme={null}
openpmm destinations list --workspace ws_01JABCDEF --json
openpmm destinations show dest_01JABCDEF --workspace ws_01JABCDEF --json
openpmm destinations connect --workspace ws_01JABCDEF --provider youtube
openpmm destinations connect --workspace ws_01JABCDEF --provider bluesky --account alice.bsky.social
openpmm destinations sessions show dcs_... --workspace ws_01JABCDEF
openpmm destinations refresh --workspace ws_01JABCDEF
openpmm destinations disconnect dest_... --workspace ws_01JABCDEF --yes
```

Use `destinations show` to read the detailed capability contract.
For X, `capabilities.body_text_limit` reports the maximum weighted characters.
The limit applies to each thread item.
Run `destinations refresh` after the X account changes subscription tier.
The refresh updates the limit without changing the Destination ID.

Provider consent completes in a browser. The connection command returns its authorization URL.
Bluesky requires `--account` with a handle or DID. Mastodon requires `--instance-origin`.
The supported provider values are `bluesky`, `x`, `youtube`, `facebook`, `instagram`, `threads`, `mastodon`, `linkedin`, and `tiktok`.

<Note>
  During the beta, not every provider is connectable in every deployment. When a
  provider is not available yet, `destinations connect` fails immediately with a
  `destination_unavailable` error instead of returning a pending session.
</Note>

### Configure a Destination queue

Pass the complete queue policy as JSON.
The CLI gets the current Destination ETag before it sends the change.

```bash theme={null}
openpmm destinations update dest_01JABCDEF \
  --workspace ws_01JABCDEF \
  --queue-policy '{"enabled_weekdays":["monday","tuesday","wednesday","thursday","friday"],"windows":[{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"start_time":"08:00","end_time":"10:00"}]}' \
  --json
```

Use `--file request.json` for a policy that is easier to review in a file.
Include a returned window `id` when you keep or change that window.

## Manage Slack notifications

```bash theme={null}
openpmm slack connect
openpmm slack sessions show dcs_...
openpmm slack channels --workspace ws_01JABCDEF --json
openpmm slack update --workspace ws_01JABCDEF --slack-channel C0123456789
openpmm slack test --workspace ws_01JABCDEF --yes
openpmm slack disconnect --yes
```

The Slack connection belongs to the Account and is shared by every Workspace.
Each Workspace selects its own notification channel. Connecting and checking a
connection session do not require `--workspace`. Disconnecting clears the
channel setting for every Workspace. Sending a test and disconnecting Slack
require `--yes`.
