Skip to content
Try Free →

Bulk operations on conversations

Last updated: · 3 min read

What bulk operations exist

Actions you can apply to a multi-selected set of conversations, from the floating Bulk actions bar that appears once you check one or more conversation rows:

  1. Resolve. Mark all selected as resolved.
  2. Assign. Claim them yourself, hand them to a teammate, or send them back to "unclaimed".
  3. Snooze / Unsnooze. Set the same snooze duration across all selected, or clear an existing snooze.
  4. Set priority. Normal, High, or Urgent.
  5. Set status. Move selected conversations to any status your workspace has configured as a valid target.
  6. Mark reviewed. Clear or set the Skeptic Mode "needs review" flag across the selection.
  7. Add tag. Attach a tag to every selected conversation.

Removing a tag from many conversations at once (the tag_remove action) is available through the conversations API but isn't exposed as its own button in the bulk actions bar yet.

Up to 200 conversations per request. Selecting more than 200 and submitting returns an error — there's no automatic batching, so work through larger cleanups 200 at a time.

How to multi-select

Check the box on each conversation row you want to include. The Bulk actions bar appears at the bottom of the screen as soon as one or more rows are checked, showing the selected count and the available actions. Uncheck a row, or click the X on the bar, to clear the selection.

Bulk resolve

The most common bulk action. Use it after a campaign or product launch where many conversations share a resolution:

  1. Filter to the conversations (e.g., tag = launch-2026-q2).
  2. Check the box on each one.
  3. Click "Resolve" in the Bulk actions bar.

Selected conversations are marked resolved immediately. Bulk actions don't fire per-conversation webhooks — a batch of up to 200 webhook deliveries in one request would be a spam/latency risk — so conversation.resolved only fires from the single-conversation resolve path.

Bulk tag application

Useful for retroactively categorizing:

  1. Check the box on each conversation you want to tag.
  2. Click "Tag…" in the Bulk actions bar.
  3. Pick an existing tag.

Tags are layered on top of existing tags. Pre-existing tags aren't removed. To remove a tag from many conversations at once, use the tag_remove action via the conversations API.

Bulk snooze

For conversations awaiting external action (waiting on engineering, customer asked for time to respond):

  1. Check the box on each conversation.
  2. Click "Snooze…" in the Bulk actions bar.
  3. Pick the wake time (1 hour, 1 day, or 7 days), or Unsnooze to clear an existing snooze. The API accepts any custom duration up to 30 days if you need something the UI presets don't cover.

Each conversation reopens at the wake time and shows up in the active inbox again.

Bulk assign

Useful for shift handoffs or rebalancing workload:

  1. Check the box on each conversation (e.g., everything currently owned by the agent going off-shift).
  2. Click "Assign…" in the Bulk actions bar.
  3. Pick yourself, a teammate, or "Unassign" to send them back to the unclaimed pool.

Assigning requires the live-chat entitlement, same as claiming a single conversation.

Reverting a bulk action

There's no bulk undo. If you bulk-resolved, bulk-assigned, or bulk-tagged the wrong set of conversations, reselect them and run the opposite action (reopen via Set status, reassign, remove the tag via the API), or fix individual conversations one at a time from the conversation view. Double-check your filter and the selected count before confirming a bulk action, especially Resolve and Set status.

API for bulk operations

For automation or scripted cleanup:

Terminal window
curl -X POST https://api.askvault.co/api/workspaces/{workspace_id}/conversations/bulk \
-H "Authorization: Bearer ak_xxx" \
-H "Content-Type: application/json" \
-d '{
"ids": ["conv_a", "conv_b", "conv_c"],
"action": "resolve"
}'

The API accepts the same actions as the UI, plus tag_remove and unsnooze (not yet exposed as their own buttons in the bulk actions bar). Same 200-conversation cap per request. The response is {"ok": <count>, "failed": [{"id": ..., "reason": ...}, ...]} — a per-item failure (already resolved, tag not found, conversation not found) doesn't stop the rest of the batch from applying.

Audit logging

Every bulk action writes a single audit-log row covering the whole batch, not one row per conversation:

  • Author (the user who ran it).
  • Action type (e.g. conversation.bulk.resolve).
  • Counts — how many succeeded, how many failed, and how many IDs were in the request.
  • Action-specific detail (e.g. the tag applied, the new status, the assignee).
  • Timestamp.

Retained 365 days, the same window for every plan, then purged. It doesn't store the individual conversation IDs or a before/after snapshot of each one.

Limits

  • Max conversations per bulk action. 200 in one request — this is a hard cap, not an auto-batched chunk size; selecting more and submitting returns an error.
  • Bulk delete. Not supported at all, via the UI or the API — deleting a conversation outright is destructive and irreversible at scale, so there's no bulk (or single-conversation) delete endpoint.

Common pitfalls

Selected the wrong filter, bulk-resolved conversations you didn't mean to. There's no bulk undo. Reselect the affected conversations and bulk Set status back to your open/active status, or reopen them individually.

Bulk tag overwrites existing tags. It doesn't. Bulk tag is additive. To remove a tag from many conversations at once, use the tag_remove action via the API — there's no dedicated "remove tag" button in the bulk actions bar yet.

Reassigned to wrong agent. There's no undo; reassign again with the correct target (or Unassign).

Expecting a webhook per conversation from a bulk resolve. Bulk actions deliberately don't fire per-conversation webhooks — up to 200 deliveries in one request would be a spam/latency risk. Only the single-conversation resolve path fires conversation.resolved.

FAQ

Can I undo a bulk action?

No. Bulk actions apply immediately and there's no bulk-undo window. To revert one, reselect the affected conversations and run the opposite action, or fix conversations individually.

Can I bulk-delete conversations?

No — not via the UI or the API. Bulk delete is deliberately unsupported because it would be destructive and irreversible at scale.

What's the largest bulk operation supported?

200 per request. That's a hard cap, not a starting chunk size — selecting more and submitting returns an error, so work through very large cleanups across multiple 200-conversation requests.

Are bulk operations transactional?

Per-item, not all-or-nothing. If one conversation in the batch can't take the action (already resolved, not found, tag doesn't exist), that item is skipped and reported in failed; the rest of the batch still applies.

Can I schedule bulk actions for later?

Not today. Bulk actions run immediately. Scheduled bulk operations on the roadmap.

Was this page helpful?