---
title: "Attachment Bulk Actions"
method: POST
path: "/attachments/bulk_actions"
tags: ["Gallery"]
---

# Attachment Bulk Actions

`POST /attachments/bulk_actions`

## Request

- Base URL: `https://dc-region.zuperpro.com/api`
- URL: `https://dc-region.zuperpro.com/api/attachments/bulk_actions`
- Auth: API key in header `x-api-key`

Multi-purpose bulk dispatcher for Job gallery attachments. The `action` field selects one of five operations — `update_visibility`, `add_tags`, `remove_tags`, `copy`, or `move` — each with its own `action_options` shape (see request body). All actions are scoped to the authenticated company; `copy`/`move` additionally verify both jobs belong to the caller's company before making any change.**move** relocates attachments to the destination job and never fails on a destination duplicate: a soft-deleted row at the destination is recovered, an already-active row is skipped, and once the attachment is settled at the destination the source row is hard-deleted.**copy** never modifies the source row.

## Request body

- object
  - `action` 'update_visibility' | 'add_tags' | 'remove_tags' | 'copy' | 'move', required: Which bulk operation to perform.
  - `filter.module` 'JOB': Required for update_visibility, copy, and move. Only JOB is currently supported.
  - `filter.module_uid` string: Required for update_visibility, copy, and move. The job_uid to scope/source the action from (from_job_uid for copy/move).
  - `attachment_uids` string[]: Optional. Narrows the matched attachments to this specific set.
  - `is_photo_feed` boolean: Optional. Treated as true automatically when filter.module_uid is omitted.
  - `action_options` object: Shape depends on `action`: - update_visibility: { "attachment_visibility": "PUBLIC" | "INTERNAL" } - add_tags / remove_tags: { "tags": ["<tag_uid>", ...] } (non-empty) - copy / move: { "to_job_uid": "<job_uid>" } (must differ from filter.module_uid)
    - `attachment_visibility` 'PUBLIC' | 'INTERNAL'
    - `tags` string[]
    - `to_job_uid` string

## Response `200`

200

- object

## Other responses

- `400`: 400
- `500`: Internal Server Error

## Changes

- **2026-11-03** `3c21bc232e16`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zuper/apis/zuper-pro-api/changes/attachments/bulk_actions/post.md)

---

[API](https://skmtc.dev/zuper/apis/zuper-pro-api.md) - [All operations](https://skmtc.dev/zuper/apis/zuper-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zuper/apis/zuper-pro-api/revisions/3c21bc232e16?raw)
