---
title: "Bulk Approve Agent Drafts"
method: POST
path: "/api/v1/agents/{agent_id}/drafts/bulk-approve"
tags: ["agents"]
---

# Bulk Approve Agent Drafts

`POST /api/v1/agents/{agent_id}/drafts/bulk-approve`

Approve + send many of an agent's PENDING drafts. Sending must run on the worker
(Resend's 1 req/s, exactly-once), so this ENQUEUES the sends and returns 202 with the
count that will be processed. `draft_ids` = explicit selection; `only_safe=true` (with no
ids) sends every 'safe'-tier pending draft and never a flagged/uncertain one, scoped to
`filters` (same semantics as the /drafts/page recipient filters) when provided, so a
filtered review queue's 'Approve N safe' sends exactly the filtered set, all pages.

## Path parameters

- `agent_id` string, uuid, required

## Headers

- `authorization` string, nullable — Bearer <token>

## Request body

- BulkApproveRequest — Approve (send) many of an agent's pending drafts. Explicit ``draft_ids`` win; otherwise ``only_safe`` / ``only_flagged`` sends every draft of that tier, scoped to ``filters`` when the review queue has recipient filters or a search active.
  - `draft_ids` string[]
  - `only_safe` boolean
  - `only_flagged` boolean
  - `filters` RecipientFilters — Recipient-side scoping for the agent review queue, shared by GET /drafts/page (query params) and bulk-approve (``body.filters``) so 'the filtered view' means the same rows in both places. Semantics mirror /customers: list fields match any value, churn band is min inclusive / max exclusive, booleans key off the denormalized counters, ``q`` searches the recipient name/email.
    - `q` string, nullable
    - `health` string[]
    - `plan_tier` string, nullable
    - `plan_names` string[]
    - `lifecycle_stages` string[]
    - `min_churn_risk` number, nullable
    - `max_churn_risk` number, nullable
    - `has_bug_reports` boolean, nullable
    - `has_replied` boolean, nullable

## Response `202`

Successful Response

- EnvelopeBulkActionResult
  - `data` BulkActionResult, required
    - `action` string, required
    - `count` integer
  - `meta` Meta
    - `request_id` string
    - `timestamp` string, date-time
    - `total` integer, nullable
    - `truncated` boolean, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/minro/apis/minro-cs-platform.md) · [All operations](https://skmtc.dev/minro/apis/minro-cs-platform/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/minro/minro-cs-platform/revisions/eb854265cf29/schema)
