---
title: "Update Campaign Account Status"
method: POST
path: "/campaigns/{campaign_id}/accounts/{campaign_account_id}/status"
tags: ["campaigns"]
---

# Update Campaign Account Status

`POST /campaigns/{campaign_id}/accounts/{campaign_account_id}/status`

## Request

- Base URL: `https://dev.whispa.net` (the document declares no server; this is the origin it was published from)
- URL: `https://dev.whispa.net/campaigns/{campaign_id}/accounts/{campaign_account_id}/status`
- Auth: one of:
  - OAuth 2
    - Password
    - Token URL: `auth/bearer/login`
  - API key in cookie `access_token`

Apply an operator decision to a membership: resolve, remove, exhaust,
escalate, block with do-not-contact, or resume dialling — how a review
concludes.

## Path parameters

- `campaign_id` string, uuid, required
- `campaign_account_id` string, uuid, required

## Request body

- CampaignAccountStatusUpdate: Operator decision on a membership — the review flow's resolution, and the general manual override. Actions, not raw statuses: ``resume`` computes the right live status and re-queues a dial, which a bare status write could not express. ``resolved`` closes the account's sibling memberships too (a settled debt must not be re-dialled by another campaign); ``escalated`` additionally suppresses the account — both mirror the outcome ladder's semantics for the same facts. ``do_not_contact`` confirms a customer's no-contact request: a permanent do-not-call entry for the number and account, removed from every campaign.
  - `action` 'resolved' | 'removed' | 'exhausted' | 'escalated' | 'resume' | 'do_not_contact', required
  - `note` string, nullable
  - `expected_review_call_session_id` string, uuid, nullable

## Response `204`

Successful Response

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/whispa/apis/whispa-api.md) - [All operations](https://skmtc.dev/whispa/apis/whispa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whispa/apis/whispa-api/revisions/12c2e4aca43c?raw)
