---
title: "Check the progress of a bulk contact action"
method: GET
path: "/contacts/bulk-actions/{id}"
tags: ["Contacts"]
---

# Check the progress of a bulk contact action

`GET /contacts/bulk-actions/{id}`

For a dry run, matched_count is the answer and nothing was modified. A run whose match set exceeds the per-request ceiling fails without applying anything.

## Response `200`

Successful response

- BulkContactAction
  - `id` integer
  - `status` 'pending' | 'processing' | 'completed' | 'failed'
  - `action` 'apply_tag' | 'remove_tag' | 'add_to_list' | 'remove_from_list'
  - `target_id` integer
  - `dry_run` boolean
  - `filter` string — Human-readable rendering of the filter that was applied
  - `matched_count` integer, nullable — Number of contacts the filter matched; null until counted
  - `processed_count` integer
  - `error` string, nullable
  - `started_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable

## Other responses

- `404` — Not found

---

[API](https://skmtc.net/sendfox/apis/sendfox-api.md) · [All operations](https://skmtc.net/sendfox/apis/sendfox-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sendfox/sendfox-api/revisions/c5728da3037f/schema)
